В C # я пытаюсь вызвать "простую" функцию, которая есть в 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, из которой я загружаюсь во время компиляции?