在C#中,我想的PInvoke一個「簡單」的功能,我在C++。問題是在編譯時我不知道庫的名稱或位置。在C++中,這很容易:PInvoke在編譯時不知道DLL嗎?
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?
我缺少的東西?要使用LoadLibrary,您*需要知道dll的名稱。如果OP _knew_ dll的名字,他不會嘗試在第一個地方找到不同的解決方案。編輯:認爲我錯過了「在編譯時」vs「在運行時」。 –