我开发了一个Com服务器和Windows XP 32位。为了测试Com服务器,我使用C#创建了一个Client,通过Interop调用函数。 一切正常,但现在我需要让ComServer在Windows 7 64位系统上运行。 我将ComServer DLL和C#EXE带到了64位计算机,用regsrv32注册了ComServer DLL并启动了C#程序。 我首先尝试访问ComServer功能,我得到的是错误:
System.Runtime.InteropServices.COMException(0x80040154):Die COM-KlassenfactoryfürdieKomponente mit CLSID {BA4D7F46-A47E-4CB9-A153-2B4657C4DD29} konnte aufgrund des folgenden Fehlers nicht abgerufen werden:80040154。
英文:
System.Runtime.InteropServices.COMException(0x80040154):由于错误:80040154,无法调用具有CLSID {BA4D7F46-A47E-4CB9-A153-2B4657C4DD29}的组件的COM-Classfactory。
这里出了什么问题?是不是可以在64位系统上调用32位DLL?如果是,所有其他32位程序如何工作?
问候 camelord
答案 0 :(得分:1)
您无法将32位库加载到64位进程中,反之亦然 - 库和进程必须具有相同的位数。
最好的解决方案是获得64位版本的COM服务器库。如果这不可能(这很常见),您有两种选择:
在第一种情况下,您将程序和COM服务器都设置为32位,因此COM服务器库可以正常加载。在第二种情况下,COM +创建一个32位代理进程并将库加载到其中,您的程序通过RPC与该进程通信,因此您不必关心位数差异。
两种选择都有缺点。在第一种情况下,即使在64位系统上也可以使程序32位。在第二个阶段,由于进程间通信而遇到开销。
答案 1 :(得分:0)