gpt4 book ai didi

.net - 如何在另一个目录中分离托管和非托管 DLL

转载 作者:行者123 更新时间:2023-12-04 05:51:00 25 4
gpt4 key购买 nike

我的发布文件夹是:

MyApp.exe
MyManagedDLL.dll
NativeDLL.dll

MyApp 使用通过 pinvoke 调用 native dll 的托管 dll。
我试图将它们移动到另一个子文件夹文件夹,我再次引用了托管 dll,当我运行我的应用程序时,它说它找不到 NativeDLL.dll。如何解决?

最佳答案

Windows 不知道它需要在子目录中查找 DLL。它只会在选定的几个位置中查找 DLL,从包含 EXE 的文件夹开始。给它一个艰难的时期,它不是很有成效。但是您可以通过调用 SetDllDirectory() 来帮助它。请记住,您的用户不会关心 DLL 的位置。 IT 部门倾向于使用简单的解决方案,当应用程序本身改变 Windows 搜索路径时,解决 DLL 加载问题从来都不是一件有趣的事情。

否则,这是允许 AnyCPU 可执行文件在 32 位和 64 位模式下运行的合理方法。您将使用两个目录,一个是 32 位版本的 DLL,另一个是 64 位版本。并根据 IntPtr.Size 的值相应地调用 SetDllDirectory。

[DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
static extern bool SetDllDirectory(string lpPathName);

关于.net - 如何在另一个目录中分离托管和非托管 DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10044511/

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