我有一个C ++ DLL,它使用LoadLibrary函数加载C ++ CLI库,如下所示:
HMODULE myDLL = LoadLibrary("DLLtoBeLoaded.dll");
这是有效的。 但我想要我的" DLLtoBeLoaded.dll"在不同的目录中(与可执行目录不同)。所以我试过了:
HMODULE myDLL = LoadLibrary("C:\\DLLtoBeLoaded.dll");
这不起作用。虽然此后myDLL不为null,但未调用DLLtoBeLoaded.dll的构造函数。
修改
MyDLL不为null,因为LoadLibrary实际上是成功的。但它似乎不起作用的原因是DLLtoBeLoaded.dll引用了一些也不在可执行文件目录中的dll(如果我只是在可执行文件夹中复制引用的dll,程序就可以工作)。是否可以将引用的dll保存在不同的可执行文件夹中?
答案 0 :(得分:0)
可以从与可执行文件不同的文件夹中引用dll。 每当运行时无法加载引用的程序集时,它就会触发Assembly Resolver事件。 我从this链接得到了基本的想法。 还有其他方法(探测和代码库)。但我最喜欢这个。
答案 1 :(得分:0)
您可以在SetDllDirectory
之前使用SetCurrentDirectory
或简单LoadLibrary
来设置DLL目录(在示例中为C:\
)。