问题标签 [setdlldirectory]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1949 浏览

c# - SetDllDirectory 不工作 (DllNotFoundException)

我正在尝试使用相同的 DllImport 调用加载我的 32/64 位本机 dll。

目录结构:

根:

  • 应用程序.exe
  • /win64/
    • stb_image.dll
  • /win32/
    • stb_image.dll

我尝试使用此解决方案,但您看不到成功。

例如这个函数调用:

但它不起作用,因为我得到一个 DllNotFoundException。

我使用 SetDllDirectory 的方式:

这是我程序中的第一次调用,所以它应该设置正确的路径。它也返回真。

但是,如果我将(在我的情况下)64 位本机 dll 放在 exe 的目录中,那么即使我将 DllDirectory 设置为不同的路径,它也可以工作。

有什么帮助吗?

0 投票
1 回答
1710 浏览

windows - SetDllDirectory 没有级联,因此无法加载依赖 DLL

我从一个目录执行一个 exe,比如说,“C:/test”
DLL 位于目录“C:/test/dlls”中,所以,在这个 exe 中,我调用:

然后我打电话

lib1.dll需要目录“C:/test/dlls”中的其他 DLL,但是当我执行pr(...)got from时GetProcAddress,出现错误:

“程序无法启动,因为您的计算机中缺少 lib2.dll。请尝试重新安装程序以解决此问题。”

如果我移动lib2.dll到“C:/test”,就会找到它。这意味着这SetDllDirectory()仅对加载第一个 DLL 有效。

有谁知道为什么以及如何解决它?

0 投票
1 回答
961 浏览

c# - 如何在 [DllImport] 之前调用 SetDllDirectory()?

我正在构建一个需要从 C++ dll 调用函数的 .Net C# 库项目。C++ dll 位于我项目的“lib”文件夹中。所以我使用[DllImport]。我需要将 lib 文件夹中 C++ dll 的路径传递给 DllImport。

我不希望它成为硬编码的完整路径。据我所知,我可以调用 SetDllDirectory("lib") 来添加我的 lib 文件夹进行搜索。但是,如果我没记错的话,应该在 [DllImport] 之前调用 SetDllDirectory()。我可以从哪里打电话?如果我从静态构造函数中执行此操作,则为时已晚。

0 投票
1 回答
252 浏览

c# - 如何将依赖项从库项目复制到主项目?

我有一个引用托管 dll(用 C# 编写的库)的 Asp.Net 项目(Vb.Net)。该库项目在 lib 文件夹中有几个非托管依赖项 dll(在构建期间复制到 bin/Release/lib 文件夹中)。该库不是主要解决方案的一部分。

我的库使用引用非托管 dll 的 [DllImport]。但是为了让非托管 dll 被找到,我调用了 SetDllDirectory():

我正在努力生成非托管 dll 及其依赖项的路径。我可以从我的主要项目 bin 文件夹或其他东西开始。但是接下来我该怎么办?例如,有没有办法将非托管 dll 从库的 bin/Release/lib 文件夹复制到我的主项目的 bin 文件夹?还是其他解决方案?