在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“在运行时”。 –