gpt4 book ai didi

c# - 从子文件夹链接 dll

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:16:47 25 4
gpt4 key购买 nike

我已经为一些非托管 dll (OpenCV) 编写了一个 C++/CLI 包装器。到目前为止一切正常。现在我想将 dll 存储在子文件夹中,因此最终的应用程序结构如下所示:

bin\
MainApp.exe
wrapper.dll
Wrapper\library1.dll
Wrapper\library2.dll

此外,我想在 Wrapper 项目中配置它,所以我不需要在任何其他使用 wrapper.dll 的项目中关心它

我发现有好几篇帖子都在谈论这个,但似乎没有一个符合我的需求:

  • 在 app.config 文件中设置路径:wrapper.dll 没有app.config 文件,我必须在每个使用 dll 的可执行项目。
  • 设置 AppDomainSetup.PrivateBinPath:这可能是一种解决方法,但我不确定它是否适用于非托管 dll。
  • 使用 ILMerge:它是否适用于非托管 dll 以及 C++/CLI dll?

理想情况下,我在项目设置中寻找一个属性来添加这个子文件夹,这样每个解决方案(包括我的项目)都会在正确的文件夹中寻找非托管 dll。

最佳答案

这里的问题是 DLL 通常由 Windows 加载,并且在您的应用程序启动时加载。 Windows 首先查看 EXE,找到它需要的 DLL,加载它们,然后继续加载 DLL 所需的 DLL。这并非特定于 C++ 或 C#。

.Net 确实会影响 DLL 加载,但这不适用于 native DLL。

那么,你能做什么?一种解决方案是让 Windows 加载您的 DLL。 Visual Studio 有一个 DelayLoad 选项。这在运行时使用 LoadLibrary。使用 dliNotePreLoadLibrary,您可以控制它的加载位置。由于这是在运行时从您的 DLL 发生的,因此可执行文件不需要执行任何操作。

关于c# - 从子文件夹链接 dll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32579813/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com