Получить доступ к COM-параметру "THIS_" через C # ComImport - PullRequest
0 голосов
/ 05 сентября 2010

Большинство ком-методов имеют такую ​​подпись:

STDMETHOD(someFunc) (THIS_ ParamType param) PURE;

Что переводится в C # через ComImport как:

[PreserveSig()]
int someFunc(MarshaledParamType param);

Есть ли способ сохранить параметр "THIS_" в сигнатуре PInvoke? Так что я могу сделать что-то вроде:

int someFunc(IntPtr ptrToCOMInstance, MarshaledParamType param);

или

int someFunc(IMyCOMClass comInstance, MarshaledParamType param);

1 Ответ

1 голос
/ 05 сентября 2010

Это ложная аннотация, представляющая указатель this , который передается методу класса.На самом деле вы не объявляете это ни в C ++, ни в C #, это передается без явной записи.

Но учтите разницу между сервером и клиентом.На сервере вы используете ключевое слово this для восстановления этого указателя.В клиенте у вас есть ссылка на объект.Например:

Word.Application app = new Word.Application();
Word.Document doc = new Word.Document();

Переменные app и doc - это ссылки на объекты, которые вы ищете.Значение this внутри реализации Word интерфейсов Application и Document.На мгновение не обращая внимания на тонкости RCW.

...