powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / COM,OLE - Вызов IDispatch.Invoke напрямую - меняется порядок следования параметров
2 сообщений из 2, страница 1 из 1
COM,OLE - Вызов IDispatch.Invoke напрямую - меняется порядок следования параметров
    #32325419
ura
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос к тем, кто разбирался во внутренностях OLE-технологии

Есть интерфейс ITest c одним методом:
Код: plaintext
1.
2.
3.
  ITest = interface(IDispatch)
    ['{B3C48C9D-3DF7-489F-9D20-D321D36392A8}']
    procedure Method1(p1: Integer; p2: Integer; p3: Integer); safecall;
  end;

Нужно вызвать этот метод, при условии, что его имя не известно на этапе компиляции...

При обычном вызове
Код: plaintext
1.
2.
3.
4.
var O : IDispatch;
begin
  O := CreateOleObject('Project1.Test');
  (O as ITest).Method1( 1 , 2 , 3 );
end;
Все проходит нормально - в OLE-объект передаются три параметра: 1,2 и 3.
А если делаю run-time вызов:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
var O : IDispatch;
  Disp: TDispParams;
  Args: array[ 0 .. 2 ] of TVariantArg;
begin
  O := CreateOleObject('Project1.Test');

  // Присваиваю аргументы
  OleVariant(Args[ 0 ]) :=  1 ;
  OleVariant(Args[ 1 ]) :=  2 ;
  OleVariant(Args[ 2 ]) :=  3 ;

  with Disp do begin
    rgvarg := @Args;
    cArgs :=  3 ;
    rgdispidNamedArgs := nil;
    cNamedArgs :=  0 ;
  end;

  O.Invoke( 1 ,GUID_NULL,GetThreadLocale,DISPATCH_METHOD,Disp,nil,nil,nil);
end;

В результате OLE-объекту параметры передаются в обратном порядке: 3,2,1
Вопрос - почему, собствено, так происходит ? Будет ли такой код аналогично работать на других ОС ?
У меня Delphi5, Win2000
...
Рейтинг: 0 / 0
COM,OLE - Вызов IDispatch.Invoke напрямую - меняется порядок следования параметров
    #32327697
ura
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все разобрался... нашел в MSDN описание DISPPARAMS
Действительно, массив параметров в структуре TDispParams должен описываться задом наперед... вот ссылка , если кому интересно
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / COM,OLE - Вызов IDispatch.Invoke напрямую - меняется порядок следования параметров
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]