Форум: "WinAPI";
Текущий архив: 2004.02.25;
Скачать: [xml.tar.bz2];
ВнизПодключение к запущенному процесус Найти похожие ветки
← →
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 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.02.25;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.029 c