簡體   English   中英

從64位模式運行的c#調用32位COM

[英]Calling 32bit COM from c# running in 64bit mode

我有一個第三方COM對象(32位),我需要從我的c#應用程序(64位)調用。 我知道我必須在一個單獨的進程中運行COM對象。 這個COM對象有很多類實現,所以我試圖避免編寫自己的遠程包裝器來公開所有的方法。 COM +似乎是最直接的解決方案。 我打開了“組件服務”菜單,創建了一個新的COM +應用程序,將我的COM對象作為組件添加到此應用程序中。 一切似乎都很美妙。

在我的C#應用​​程序中,我添加了原始COM對象作為引用(自動生成類型庫)。 使用類型庫引用,我可以從COM +組件創建對象(我看到它們開始在組件服務窗口中旋轉),但是當我嘗試訪問對象的方法時,我得到一個錯誤說接口沒有注冊。

有人有線索嗎? 我回去並在COM對象上運行了regsvr32,但我認為沒有必要,並沒有幫助。 我在C#中的用法是否正確? VS2008自動完成沒有問題看到這些方法。

確切的例外是:“未注冊接口(HRESULT異常:0x80040155)”

我不清楚組件服務中的權限和角色究竟是什么,我嘗試將COM +對象標識設置為在系統帳戶下運行,既作為本地服務又作為交互式用戶。 我在角色中添加了Everyone作為用戶。 一切都在本地運行,所以不應該有文件權限或類似的問題。

我還想重申一下這個COM對象包含很多類。 我在客戶端成功實例化了一個類對象並設置了一些屬性值。 我也成功實例化了另一個類對象,但在嘗試調用第二個對象的方法時收到了這個異常....所以我認為我的COM對象注冊的注冊表存在問題。

我們遇到了類似的情況,使用VFP的COM dll。

這一切都取決於權利和權限,如Yahia所說。 我們通過這樣做得到它:

  • 安裝VFP oledb 9驅動程序(不知道你有什么可能不需要)。
  • 給網絡服務IIS_IUSR完全控制COM文件夾(需要這樣DLL,當從網站調用時,可以在自己的文件夾中進行一些日志記錄)。
  • 運行regsvr32.exe“c:\\ xxx \\ yourfile.dll” - >這應該會成功!
  • 創建COM +應用程序,並添加DLL作為一部分
  • 在具有足夠權限的用戶上設置應用程序COM +憑據

我們不得不對應用程序池/ IIS中的權限進行更多設置,但我猜這不是必需的。

無論如何,只要確保你有足夠的日志記錄,確保dll已注冊,之后它的所有權利權利..

祝你好運!

很抱歉使用“答案”回復評論,但這似乎是我唯一的途徑。

遷移到64位操作系統的全部目的是獲得額外的可尋址內存空間,因此無法以32位模式運行整個應用程序。

可能與以下問題有關:在成功創建三個類對象之后,我能夠在一個中設置屬性,在第二個中調用一個沒有參數的方法,但是它在第三個中調用了一個方法,它接受了另外兩個對象作為拋出異常的參數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM