Как получить доступ к COM vtable и получить доступ к его записям из TLB (библиотеки типов) в C #? - PullRequest
0 голосов
/ 12 мая 2010

Мне нужно получить доступ к COM vtable, в котором есть записи тех функций, которые открыты для внешнего мира через какой-то определенный интерфейс в C #.

Я обращался к типам, включенным в TLB с LoadTypeLib, и перебирал их, играя с ITypeInfo.

Теперь единственное, что мне нужно, это один за другим получить доступ к этим методам внутри vtable интерфейса COM и вызывать их поочередно в RUNTIME.

Мне нужен адрес COM vtable и его индексированные записи (т.е. адреса функций).

1 Ответ

0 голосов
/ 12 мая 2010

Вы можете создать оболочку C # из TLB с помощью программы TlmImp.exe. См. Как: создать основные сборки взаимодействия с помощью Tlbimp.exe для получения дополнительной информации.

например. tlbimp LibUtil.tlb /primary /keyfile:CompanyA.snk /out:LibUtil.dll

Редактировать: отразить комментарий.

Так как код C # всегда выполняется в CLR , любой вызов в неуправляемый мир необходимо правильно распределить . У вас есть возможность

(a) разрешить сгенерированным оболочкам просто выполнять взаимодействие, или

(б) вы можете оптимизировать упаковщики самостоятельно.

(c) Другое, что вы можете сделать, это написать свою oen-оболочку в управляемом c ++, а затем напрямую вызвать vtable. Я подозреваю, что это приведет к очень низким накладным расходам.

(d) Последний вариант - просто написать простую неуправляемую библиотеку DLL с одной функцией и использовать P / Invoke для вызова ее непосредственно из управляемого кода.

...