2011-05-17 98 views
3

我在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

回答

2

聽起來像第三方COM DLL只有32位。您必須將您的應用程序配置爲僅以32位運行,而不是任何cpu。

+0

我正在編譯爲x86,並強制將tlbimp作爲x86的包裝器。 – MrTelly 2011-05-17 02:36:11

3

嘗試使用COM +作爲主機,並保持您的應用程序編譯爲64位。欲瞭解更多信息,請參閱this link

+0

謝謝你的優秀鏈接。這可能會解決我在x64 ASP.NET中使用ESRI運行時時遇到的類似問題。 – hsmiths 2011-05-17 03:47:46