如何在 C# 中卸载通过 DllImport 导入的 dll

How to unload a dll in C# imported via DllImport

提问人:chrisk 提问时间:11/2/2023 最后编辑:chrisk 更新时间:11/2/2023 访问量:57

问:

我目前正在开发一个插件 dll für 第三方应用程序。 这个插件 dll 是用 C# 编写的。 插件 dll 使用 c++ dll 并通过 DllImport 导入其函数。

每次我在第三方应用程序运行时重新编译 c++ dll 时,编译器都会提到: 链接:致命错误LNK1104:无法打开文件“cpp.dll”

然后我必须关闭第 3 方应用程序。 卸载插件dll似乎还不够。 当第三方应用程序关闭时,我可以重新编译cpp.dll

问题: 我必须在我的 C# 代码中做什么,以便在每次卸载插件 .dll 时卸载 cpp.dll,这样我就不必关闭第 3 方应用程序?

我试图找到卸载 cpp.dll 的解决方案,但没有成功或建议的解决方案似乎不可靠。

C# C++ DLL 加载 卸载

评论

1赞 Eldar 11/2/2023
这回答了你的问题吗?卸载使用 DllImport 加载的 DLL
0赞 chrisk 11/2/2023
不,因为它没有解决第 3 方应用程序的问题,并且此处建议的解决方案似乎不可靠。
1赞 Charlieface 11/2/2023
听起来第三方应用程序本身正在使用 cpp.dll,并且似乎它还在其上使用非共享文件句柄(它真的不应该这样做)阻止您编译。也许针对 cpp.dll 的另一个副本进行编译?
0赞 chrisk 11/2/2023
好吧,cpp.dll 是通过我的 c# 代码(我的插件 dll)导入的。由于我不知道第三方应用程序是做什么的(它是一个像 OBS 这样的应用程序),有没有办法找出发生了什么?

答: 暂无答案