我正在尝试在C#中使用PInvoke调用C++的“简单”函数。问题是我不知道库的名称或位置在编译时是什么。在C++中,这很容易实现:
typedef HRESULT (*SomeFuncSig)(int, IUnknown *, IUnknown **);
const char *lib = "someLib.dll"; // Calculated at runtime
HMODULE mod = LoadLibrary(lib);
SomeFuncSig func = (SomeFuncSig)GetProcAddress("MyMethod");
IUnknown *in = GetSomeParam();
IUnknown *out = NULL;
HRESULT hr = func(12345, in, &out);
// Leave module loaded to continue using foo.
我真的无法想象如何在C#中完成这个任务。如果我知道dll的名称,我就不会有任何问题,代码可能看起来像这样:something。
[DllImport("someLib.dll")]
uint MyMethod(int i,
[In, MarshalAs(UnmanagedType.Interface)] IUnknown input,
[Out, MarshalAs(UnmanagedType.Interface)] out IUnknown output);
我应该如何在不知道编译时加载的dll的情况下完成这个操作?