是否可以从给定路径的 Borland C++ 中的 dll 使用 LoadLibrary?
Is it possible to use LoadLibrary from a dll in Borland C++ from a given path?
我有一个 C++ dll,它使用 LoadLibrary 函数加载 C++ CLI 库,如下所示:
HMODULE myDLL = LoadLibrary("DLLtoBeLoaded.dll");
这行得通。
但我希望我的 "DLLtoBeLoaded.dll" 在不同的目录中(不同于可执行目录)。所以我尝试了:
HMODULE myDLL = LoadLibrary("C:\DLLtoBeLoaded.dll");
这不起作用。尽管此后 myDLL 不为空,但未调用 DLLtoBeLoaded.dll 的构造函数。
编辑
MyDLL 不为空,因为 LoadLibrary 实际上是成功的。但它似乎不起作用的原因是 DLLtoBeLoaded.dll 引用了一些也不在可执行目录中的 dll(如果我只是在可执行文件夹中复制引用的 dll,程序就可以工作)。是否可以将引用的 dll 保存在与可执行文件不同的文件夹中?
可以从与可执行文件不同的文件夹中引用 dll。
每当运行时无法加载引用的程序集时,它都会触发 Assembly Resolver 事件。
我从 this link 得到了基本的想法。
还有其他方法(探测和代码库)。但是我最喜欢这个。
您可以在第一个 LoadLibrary
之前使用 SetDllDirectory
或简单地使用 SetCurrentDirectory
来设置 DLL 目录(在您的示例中为 C:\
)。
我有一个 C++ dll,它使用 LoadLibrary 函数加载 C++ CLI 库,如下所示:
HMODULE myDLL = LoadLibrary("DLLtoBeLoaded.dll");
这行得通。 但我希望我的 "DLLtoBeLoaded.dll" 在不同的目录中(不同于可执行目录)。所以我尝试了:
HMODULE myDLL = LoadLibrary("C:\DLLtoBeLoaded.dll");
这不起作用。尽管此后 myDLL 不为空,但未调用 DLLtoBeLoaded.dll 的构造函数。
编辑
MyDLL 不为空,因为 LoadLibrary 实际上是成功的。但它似乎不起作用的原因是 DLLtoBeLoaded.dll 引用了一些也不在可执行目录中的 dll(如果我只是在可执行文件夹中复制引用的 dll,程序就可以工作)。是否可以将引用的 dll 保存在与可执行文件不同的文件夹中?
可以从与可执行文件不同的文件夹中引用 dll。 每当运行时无法加载引用的程序集时,它都会触发 Assembly Resolver 事件。 我从 this link 得到了基本的想法。 还有其他方法(探测和代码库)。但是我最喜欢这个。
您可以在第一个 LoadLibrary
之前使用 SetDllDirectory
或简单地使用 SetCurrentDirectory
来设置 DLL 目录(在您的示例中为 C:\
)。