Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.02.25;
Скачать: CL | DM;

Вниз

Подключение к запущенному процесус   Найти похожие ветки 

 
zdn ©   (2003-12-17 13:14) [0]

Мастера! Пподскажите,пожалуйста, как подключится к запущенной программе, процессу????


 
Digitman ©   (2003-12-17 13:18) [1]


> как подключится


никак


 
zdn ©   (2003-12-17 13:20) [2]

В смысле, нет никакого способа???


 
Digitman ©   (2003-12-17 13:36) [3]


> В смысле, нет никакого способа???


в смысле - нет вообще такого понятия : "подключиться"

и совершенно непонятно, что под сим тобой подразумевается, равно как и где ты нахватался таких терминов, достойных, увы, примитивного юзера, но отнюдь не программиста приложений для Win32-платформ


 
zdn ©   (2003-12-17 13:39) [4]

А какое есть понятие, просвяти.
Просто существует открытое приложение,
очень хочется в нем выполнить действия.


 
Digitman ©   (2003-12-17 13:40) [5]


> существует открытое приложение,
> очень хочется в нем выполнить действия.


какие ?


 
zdn ©   (2003-12-17 13:41) [6]

Ну, например, сформировать какой-то отчет


 
Digitman ©   (2003-12-17 13:45) [7]


> сформировать какой-то отчет


а оно, приложение, само по себе "умеет" это делать ?
и оно, приложение, предоставляет возможность подачи ему извне неких "команд", предписывающих данному приложению сформировать этот самый "какой-то отчет" ?


 
zdn ©   (2003-12-17 13:50) [8]

1-Оно приложение, это - 1С предприятие, котороре само умеет делать отчеты.
2- в том то и дело, что извне ОНО команды выполнять может, но только в том случае, если я сам создам объект этого приложения(создание ОЛЕ объектов), а
если объект уже существует, т.е. созданный не мной, а , то к нему, как-бы и не достучишься.


 
zdn ©   (2003-12-17 13:52) [9]

Создаю и соединяюсь я так:

if Length(s1cAppProgID)<=0 then s1cAppProgID:="V77.Application";
if Length(s1cAppProgID)>0 then begin
s1cResult := GetActiveObject(ProgIDToClassID(s1cAppProgID),nil,s1cUnknown);
if (s1cResult = MK_E_UNAVAILABLE) then begin
Result := CreateOleObject(s1cAppProgID);
s1CResOpen:=Result.Initialize(Result.RMTrade, InitLine, EmptyString);
end
и т.д.


 
zdn ©   (2003-12-17 14:06) [10]

Все, здаешьси :)


 
Digitman ©   (2003-12-17 14:24) [11]

function AttachTo1CEngine: OleVariant;
begin
try
Result := GetActiveOleObject(s1cAppProgID);
except
Result := CreateOleObject(s1cAppProgID);
end;
end;
..

var
1CEngine: OleVariant;
...

try
1CEngine := AttachTo1CEngine;
try
// здесь делаем свое черное дело
....
finally
1CEngine := Null;
end;
except
on e:Exception do
if e is EOleSysError then
with EOleSysError(e) do
case loword(errorcode) of
499: ShowMessage("Фиг Вам, а не 1C !");
else
raise;
end
else
raise;
end;


 
Digitman ©   (2003-12-17 14:28) [12]

и впредь изволь изъясняться точно, мол, у меня возникают проблемы при попытке в своем приложении (OLE-контроллере)создания нового/задействовании существующего экз-ра внешнего OLE-сервера !


 
zdn ©   (2003-12-17 14:49) [13]

Огромное спасибо, Сейчас попробую.
И впредь буду изъясняться намного точнее.
Еще раз спасибо!!!!!!!!!!!!!!!!!!!!!


 
zdn ©   (2003-12-17 15:02) [14]

Да, тут проблемка возникает!!!
Дело в том, что у клиента на машине может быть запущено два-...
OLE-сервера, с разными параметрами.
К какому подключится GetActiveOleObject?
Я думаю к первому или вооще свалится.


 
Digitman ©   (2003-12-17 15:19) [15]


> К какому подключится GetActiveOleObject?


при использовании именно такого механизма у тебя нет выбора - аттач произойдет к первому же найденному активному экземпляру


 
zdn ©   (2003-12-17 15:23) [16]

Это вроде ясно. Там правда есть, такая штука как
Result.Initialize(Result.RMTrade, InitLine, EmptyString)
InitLine - параметры подключения к 1С
т.е. Можно проинициализировать,
но чо-то оно не помогает...


 
zdn ©   (2003-12-17 15:26) [17]

Да и он постоянно ругается, что операция не допустима


 
zdn ©   (2003-12-17 15:27) [18]

точнее "Операция недоступна"


 
Digitman ©   (2003-12-17 15:32) [19]


> zdn



> Да и он постоянно ругается


кто "он" ?! Пушкин ?)


> точнее "Операция недоступна"


если объект успешно создан/приаттачен, то это уже твои проблемы


 
zdn ©   (2003-12-17 15:37) [20]

Result := GetActiveOleObject("v77.Application");
Выдает сообщение:
"raised exception class EOLESysError with message Операция недоступна"


 
Digitman ©   (2003-12-17 15:57) [21]

не выдумывай.

если ты не менял мой код, то именно в моем коде ВСЕ исключения, потенциально генерируемые этим вызовом, перехватываются блоком try..except

исключение же это возбуждается, видимо, строчкой CreateOleObject(s1cAppProgID) и не "гасится" ничем, посему ты и видишь его


 
zdn ©   (2003-12-17 16:06) [22]

Как раз на CreateOleObject исключений не возбуждается,
т.е. создается он без проблем. А вот если запустить 1С предприятия потом по нажатию в приложении Делфи на кнопку где
написано getActiveOLEObject("v77.application")
возбуждается это исключение. быстрей всего это проблема с 1С
так как он не может запускаться без параметров.
Ладненько спасибо.
Закрываем тему!!!!!!!!!!!!


 
savva ©   (2003-12-17 16:09) [23]

он прав.. у меня тоже самое исключение (если проходить отладчиком) при запущенной 1С (причем не зависимо от того в каком режиме 1С запущена)..
Весь вопрос в том, что исключение не выходит наружу (как Вы сказали - "гасится" все). Засада в GetActiveOleObject - она генерирует это исключение вне зависимости от запущенной 1С

ЗЫ. Но я думаю это уже выходит за рамки данного вопроса..


 
Digitman ©   (2003-12-17 16:19) [24]

код исключения 483 ?

в таком случае это "капризы" самого 1С как сервера автоматизации



Страницы: 1 вся ветка

Текущий архив: 2004.02.25;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.02 c
4-80357
FeRR
2003-12-16 12:34
2004.02.25
SendMessage + WM_KEYDOWN


14-80157
Android
2004-02-01 21:54
2004.02.25
Vendorid и Deviceid


14-80289
тихий вовочка
2004-02-05 07:34
2004.02.25
Как давно вы занимались креативом?


4-80342
A.l.i.v.e
2003-12-21 08:56
2004.02.25
Получение handl ов контролов для окна (известен хендл)


14-80171
VID
2004-01-31 20:32
2004.02.25
Знатокам VBScript...