gpt4 book ai didi

.net - 从.Net托管代码加载32或64位DLL

转载 作者:行者123 更新时间:2023-12-04 13:45:47 25 4
gpt4 key购买 nike

我有一个非托管的DLL(Skintilla代码编辑器的scilexer.dll,由CodePlex的Scintilla.Net使用),它是通过Scintilla.Net组件从托管应用程序加载的。 Windows托管应用程序在32位和64位环境中都可以正常运行,但是我需要创建使用64或32 scilexer.dll的不同安装。

有没有一种方法可以同时分发32位和64位格式的DLL,以便.Net框架的DLL加载程序根据某些.config选项或某些“路径名魔术”的东西加载32位或64位格式的非托管DLL?

最佳答案

P/Invoke使用LoadLibrary加载DLL,如果已经加载了给定名称的库,LoadLibrary将返回它。因此,如果您可以为两个版本的DLL提供相同的名称,但将它们放在不同的目录中,则可以在从scilexer.dll首次调用函数之前执行一次类似的操作,而无需重复您的extern声明:

    string platform = IntPtr.Size == 4 ? "x86" : "x64";
string dll = installDir + @"\lib-" + platform + @"\scilexer.dll";
if (LoadLibrary(dll) == IntPtr.Zero)
throw new IOException("Unable to load " + dll + ".");

关于.net - 从.Net托管代码加载32或64位DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/377181/

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