如何根据CPU架构使用正确的非托管DLL文件?(32/64位)

Sta*_*wer 7 .net c++ 32bit-64bit

我必须使用ASP.NET站点的C++ DLL文件.该站点将托管在32位和64位环境中.

我有一个32位和64位版本的非托管DLL文件.如何根据当前服务器体系结构从正确的方法导入方法?

就像有人发布的那样,这可以作为部署问题来处理.我担心的是:使用此DLL文件的Web应用程序非常庞大,而且我们没有部署文档.没有人会记得部署正确的DLL文件,所以我试图从解决方案中删除人为因素:)

Ben*_*igt 5

最简单的方法是在两个不同的目录中为两个本机库提供相同的文件名,然后根据位数调整应用程序DLL搜索路径.

http://www.pinvoke.net/default.aspx/kernel32.setdlldirectory


Gre*_*jan 1

要让编译器/框架完成您需要的大部分工作

  1. 有多个构建“平台”(通常是 x86、x64 - 删除 AnyCPU)
  2. 为每个构建配置设置每个“平台目标”配置
  3. 我们添加了条件编译符号 __WIN32 和 __X64

根据平台列出函数的不同实现,如果需要同时安装,请包括不同的 dll 名称。

#if __WIN32
        public delegate int Move(int target);
        [DllImport("my.dll", SetLastError = true, CharSet = CharSet.Auto)]
#elif __X64
        public delegate int Move(int target);
        [DllImport("my64.dll", SetLastError = true, CharSet = CharSet.Auto)]
#endif
Run Code Online (Sandbox Code Playgroud)

否则,您可以使用 loadlib 并自行管理编组。

  • 你绝对不需要自己编组。 (2认同)