64位平台上的COM

3
我正在使用C#与第三方COM库,32位XP上一切正常。我使用tlbimp创建包装器并添加引用也没有问题。但是,当移植到我们的服务器环境时,即64位Windows Server 2008时,我遇到了障碍。
在下面的代码中,只有右键单击并在VS环境中测试时才能正常运行。当编译为控制台应用程序时,代码不起作用,无论是在测试中还是从控制台应用程序中调用的程序集中都不起作用。为了让它工作,我以管理员身份运行并在32位命令窗口中运行 - 仍然没有任何作用,因为grouper始终为空,并且未引发任何异常,表明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);

您是否试图将32位DLL加载到64位进程中? - Gabe
你有没有证据表明这个COM库在64位Server 2008上能够正常工作? - Gabe
@Gabe,所有的设置都已经针对x86目标进行了配置,并且我已经强制控制台应用程序在32位命令窗口中运行。也许我漏掉了什么,但我不知道是什么。 - MrTelly
你怎么知道问题不是你的COM库与64位操作系统不兼容呢?从GetTypeFromProgID中得到了什么? - Gabe
2个回答

3

尝试使用COM+作为主机,并保持您的应用程序编译为64位。有关更多信息,请参见此链接


非常感谢您提供的优秀链接。这可能会解决我在 x64 ASP.NET 中使用 ESRI 运行时遇到的类似问题。 - hsmiths

2

看起来第三方COM DLL只支持32位。您需要将应用程序配置为仅以32位运行,而不是任何CPU。


我正在编译为x86,并强制tlbimp也为x86创建包装器。 - MrTelly

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接