我必须使用ASP.NET站点的C ++ DLL文件。该站点将托管在32位和64位环境中。
我有一个32位和64位版本的非托管DLL文件。如何根据当前的服务器体系结构从正确的方法导入方法?
与发布的人一样,这可以作为部署问题处理。我担心的是:使用此DLL文件的Web应用程序非常庞大,而且我们没有部署文档。没有人会记得部署正确的DLL文件,所以我试图从解决方案中删除人为因素:)
答案 0 :(得分:5)
最简单的方法是在两个不同的目录中为两个本机库提供相同的文件名,然后adjust your application DLL search path取决于位数。
http://www.pinvoke.net/default.aspx/kernel32.setdlldirectory
答案 1 :(得分:1)
让编译器/框架完成您需要的大部分工作
根据平台列出您的功能的不同实现,包括不同的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
否则,您可以使用loadlib并自行管理编组。
答案 2 :(得分:1)
我们知道我们无法使用添加引用添加非托管DLL文件。因此,根据在项目目录中添加DLL文件的CPU架构,我们需要一种替代方法来处理非托管DLLS文件。
现在,在构建项目的任何平台上构建项目,x86和x64文件夹都将被复制到bin文件夹中。 当它将在服务器上运行时,它将根据CPU架构使用非托管DLL文件。