我需要在Silverlight程序中引用一个Com DLL。由于这是不允许的,我创建了一个wcf服务并将其引用到其中。 当我从本地计算机运行我的wcf服务时,这个想法似乎工作正常,但是当我将服务发布到我的服务器时,它无法正常工作。错误是“对象引用未设置为对象的实例”,我试图实例化DLL。 这里的问题是 m_cloVB6Encryption =新的VB6Encryption.cEncryption
VB6加密是一个复杂的问题。它调用了另一个调用其他几个DLL的DLL。
为了试图找出问题我创建了一个非常简单的VB6组件,这次我得到了错误 "由于以下错误,检索具有CLSID {74FE605A-5861-41A0-BA13-27DDD9C2EBB8}的组件的COM类工厂失败:80040154未注册类(HRESULT异常:0x80040154(REGDB_E_CLASSNOTREG))。"
尽管我手动注册了该组件并且成功了。
问题行是cloSimple = New Simple.cSimple。
我的电脑运行Windows 7;服务器运行Windows Server 2012 R2 Standard。
答案 0 :(得分:0)
据推测,你的COM组件构建为32位...所以当你注册它时,它被注册为(InProc)32位COM组件....(并且只能由32位应用程序加载)。
您的ASP.NET网站最有可能在设置为64位的AppPool中运行...因此它无法使用32位COM类。
有两个选项(最清晰,最简单的是选项1):
1)让您的IIS网站/应用程序以32位运行,这样它就可以访问您已注册的32位COM组件。
要确保您的网站也以32位运行(而不是64位)...更改DefaultAppPool以启用32位应用程序(或者您可以创建一个专门针对该Web服务/站点的32位新AppPool并使其使用它...如果你不想影响其他网站。)
OR
2)进行一些额外的注册,以便您的COM类也可用于64位客户端(您注册它以便它在OUT OF PROCESS运行...因此它可以由32位或64位客户端使用....但是你可能不会因为性能原因而想要它...而且它可能并不总是可能的)