COM在64位平台

问题描述:

我在C#中使用第三方COM库,在32位XP上都能正常工作。我使用tlbimp来创建包装,添加一个引用所有作品。但是,当移植到64位Windows Server 2008的服务器环境时,我遇到了一个障碍。COM在64位平台

下面的代码只在右键单击并测试它时运行正常,即在VS环境中运行。代码在编译到控制台应用程序时不起作用,也不在代码中工作,无论是在测试中还是从控制台应用程序调用。为了让它工作,我以管理员身份运行,并在32位命令窗口中运行 - 仍然没有任何石斑鱼总是空,并且没有抛出异常,表明GrpSvr.GrpCall是一个有效的Com库名称。

string sMessage = "no grouper"; 
    GrpSvr.GrpCall grouper = Activator.CreateInstance(
     Type.GetTypeFromProgID("GrpSvr.GrpCall")) as GrpSvr.GrpCall; 
    if (grouper != null) 
     sMessage = grouper.GroupInit(@"C:\CmdGrp.txt", true, true); 

    Console.WriteLine(sMessage); 
+0

您是否试图将32位DLL加载到64位进程? – Gabe 2011-05-17 02:16:31

+0

您是否有任何证据证明此COM库在64位Server 2008上正常工作? – Gabe 2011-05-17 03:32:37

+0

@Gabe,每件事都设置为x86目标,并且我已经强制控制台应用程序从32位命令窗口运行。也许我错过了一些东西,但我不知道什么 – MrTelly 2011-05-17 10:25:35

听起来像第三方COM DLL只有32位。您必须将您的应用程序配置为仅以32位运行,而不是任何cpu。

+0

我正在编译为x86,并强制将tlbimp作为x86的包装器。 – MrTelly 2011-05-17 02:36:11

尝试使用COM +作为主机,并保持您的应用程序编译为64位。欲了解更多信息,请参阅this link

+0

谢谢你的优秀链接。这可能会解决我在x64 ASP.NET中使用ESRI运行时时遇到的类似问题。 – hsmiths 2011-05-17 03:47:46