32位DLL不适用于64位服务器C#

时间:2014-11-21 18:48:55

标签: c# asp.net .net iis dllimport

我用Dev-C ++编译了一个c natives 32bit DLL,在我的asp.net项目上创建了引用,编写了一个dllImport指令并使用了我的新DLL。启动时,我的DEBUG会话都运行良好,但在Web服务器上部署我的项目时,运行时不会加载我的DLL。

2 个答案:

答案 0 :(得分:0)

我的IIS 7.0 w3wp.exe以64位进程运行(要检查您的进程是否在WOW64下作为32位进程运行,请打开任务管理器的进程选项卡,并查看进程名称是否包含&#34 * 32"。)

我相信64位进程只能加载64位本机DLL(以及为#34生成的托管DLL;任何CPU"或" X64")。也许您的调试会话是32位会话?如果这是原因,请查看Using a 32bit or 64bit dll in C# DllImport

答案 1 :(得分:0)

对于那些仍然无法找到在64位IIS应用程序池下使用32位DLL的人,通过调整注册表或尝试如何处理“COM +组件服务”,我找到了一个完美的解决方案:将32位组件“封装”到一个新的COM对象中,如本页所述完美地完成了这项工作,我认为很多人都有兴趣以这种方式解决问题;) http://www.chestysoft.com/component-services.asp

在我的情况下,这允许我使用来自XStandard的“XStandard.Zip”免费组件,遗憾的是,它只能作为32位ASP组件使用,并且在注册表中有一个“InProcServer32”密钥,显然阻止了它通过调整注册表来工作,如下所述:https://techtalk.gfi.com/32bit-object-64bit-environment/

在这篇文章中,很多评论都报道说“InProcServer32-IDs 没有反映,因为微软认为这些只是InProc-Calls而不是Out-Of-Proc-Calls ”。 这也是我的情况,引导我看到上一篇文章中描述的注册表调整解决方案在我的案例中不起作用的情况,与其他用户一样。

希望能节省几天......或者晚上!