我有一个库,它导出一个非托管 C 例程,该例程返回指向基于 COM IUnknown 的对象的指针。DLL 未注册,也不是服务器。我想使用 C# 中的 COM 类型。
我已经为 COM 类型编写了 C# 接口。调用 LoadLibrary() 和 GetProcAddress() 的 C# 等效项是什么?如何调用 GetProcAddress() 的结果,然后调用它来加载 COM 接口指针?
这是一个 C++ 片段,它说明了我所追求的:
// Assume I have previously declared IMyType
HANDLE mylib = ::LoadLibrary("myfakecom.dll");
IUnknown* (*GetterFunc) getter;
getter = (GetterFunc)::GetProcAddress(mylib, "GetFactory");
IUnknown *unk = getter();
IMyType *mytype = unk->QueryInterface(IID_MYTYPE);
我的直觉说“用 C++/CLI 来做”,尽管我不确定如何对任何泛型类型执行此操作,以及如何将原始 IUnknown 指针强制转换为我将使用 [Guid] 属性声明的管理器指针类型在托管接口上。