PInvoke, если вы не знаете DLL во время компиляции?

В 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, оно выглядело бы что-то так:

[DllImport("someLib.dll")]
uint MyMethod(int i,
              [In, MarshalAs(UnmanagedType.Interface)] IUnknown input, 
              [Out, MarshalAs(UnmanagedType.Interface)] out IUnknown output);

Как мне сделать это, не зная, из какой DLL я загружаюсь во время компиляции?

7
задан LCC 30 September 2011 в 18:45
поделиться