Они написаны на Делфи, так что технология Rainbow для них недоступна

Я знаю, что вызов событий ГМ идет с помощью соответствующих методов интерфейса IDispatch.
26.06.2007 19:55:29 Садовников Олег wrote:
MethodName := 'Инет_СтрокаОтКлиента';
if IDispatch(obj).GetIDsOfNames(GUID_NULL, @MethodName, 1, LOCALE_USER_DEFAULT, @MethodID) = S_OK then begin
//Параметры идут в обратном порядке
Args[0] := ConnectServer^.GUID;
Args[1] := ConnectServer^.ReadStr;
DispParams.rgvarg:=@Args; //Инициализация массива Variant
DispParams.rgdispidNamedArgs := nil;
DispParams.cArgs := 2;
DispParams.cNamedArgs := 0;
IDispatch(obj).Invoke(MethodID, GUID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, DispParams, @VarResult, @ExcepInfo, @ArgErr);
end;
27.06.2007 11:08:46 artbear wrote:
и таким макаром вызываются методы глобальника??
27.06.2007 11:08:56 Садовников Олег wrote:
Ага
Экспортируемый метод светится наружу как диспинтерфейс
27.06.2007 11:19:18 Садовников Олег wrote:
obj : Variant;
function TRiK_Inet.Init(pConnection: IDispatch): HResult; stdcall;
var
iLen : Integer;
begin
p1c := pConnection;
//Получение указателя на 1С
if VarType(obj) And varTypeMask = varEmpty then begin
obj := OleVariant(p1c).AppDispatch;
//Обязательно вызывать ТОЛЬКО _AddRef!!! Иначе 1С висит в процессах после закрытия
IDispatch(obj)._AddRef;
end;