如何使用VB 6.0从ASPX页面调用的IIS 7.0(Windows Server 2008 R2)中调试Com dll(通过Interop访问)

时间:2014-04-15 05:40:27

标签: asp.net debugging iis com interop

任何人都可以在Windows Server 2008 R2中使用VB 6.0讲述如何在IIS 7.0中调试Com Dll。 我能够使用interop dlll从Console应用程序访问VB 6.0中的断点。通过IIS 7.0中的ASPX页面我得到以下异常

  

无法转换“XCreateUser.XAcctUserProfileClass”类型的COM对象   接口类型'XCreateUser._XAcctUserProfile'。这个操作   失败,因为QueryInterface调用了COM组件   与IID'{7A48FABA-CCC8-4FA6-94E8-803F6CF121F2}'的接口失败到期   出现以下错误:加载类型库/ DLL时出错。 (例外   来自HRESULT:0x80029C4A

已经生成DLL并注册并生成了com interop dll。

请有人对此进行说明

2 个答案:

答案 0 :(得分:2)

  

已经建立并注册了DLL

"注册"这是问题,它没有正确注册。这是CLR在尝试查找[ComVisible]的.NET组件的代理时生成的异常消息。需要一个代理来从工作线程调用COM组件,该工作线程没有做任何事情来帮助使调用成为线程安全的。 MTA中的一个线程,通常是一个线程池线程。

.NET组件已在Regasm.exe注册。您忘了使用/tlb参数。

应该很容易修复。如果你还有麻烦,那么SysInternals' Process Monitor是首选武器。

答案 1 :(得分:1)

我通常会通过控制台或Windows窗体应用程序调试这些内容。您始终可以向Web应用程序添加日志记录,以查看传递给它的参数。

通常,在64位平台上运行和使用32位dll时,上述错误是设置问题。要确保的一件事是您的应用程序池允许32位应用程序。在IIS管理器中右键单击运行您的网站的应用程序池,然后转到“高级设置” - >“启用32位应用程序”。将其设置为True。

您还需要确保在32位注册表配置单元中注册了32位dll。 C:\ Windows \ syswow64 \ regsvr32是您需要用来注册此dll的版本。