2010-09-03 67 views
3

我有一個包裝本機32位dll的C++/CLI程序集。C++/CLI 64位COM

該程序集既用於.Net又用於COM(辦公室)。

現在我有一個運行64位辦公室的客戶。

是否可以創建一個使用本機32位dll並導出64位com接口的C++/CLI程序集?

回答

2

不,您不能在Windows上的一個進程中混合使用不同位數的代碼。您需要強制32位代碼進入單獨的進程或轉換該DLL。

後者很可能通過使用COM +(或大部分相同的DCOM)來實現。這是我們通常使用本機C++代碼所做的。我不確定C++/CLI程序集有多容易。

+0

這就是我所懷疑的。謝謝 – adrianm 2010-09-03 10:00:30

+0

由於Office/plugin接口已經是COM,所以不妨在C/C++和本地庫之間引入新的轉換層。 – 2010-09-03 14:21:25

0

以某種方式說話,是的。

繼續編譯C++/CLI代碼爲32位,因此它可以使用C++ interop使用本地庫。

然後,您必須將其配置爲在充當Office 64插件時作爲進程外COM服務器加載。使用原生COM代碼,midl會自動生成64位代理。在註冊標記爲COMVisible的.NET類時,應該有類似的功能來創建代理。

64位COM接口將包含在自動生成的64位代理DLL中,因此這並不違反流程中所有模塊的位必須相同的規則。