2008-10-07 65 views
1

基本上我有一羣非託管VC++靜態庫。而使用它的VC++ GUI應用程序則基於MFC。 目標是用C#中完成的應用替代GUI應用,而使用所有相同的靜態庫。 問題是,如果這甚至是可能的,如果是的話,那麼什麼是正確的方式來實現呢?非託管vC++靜態庫和C#GUI應用程序

建議,任何人? 謝謝。

回答

1

Rob是正確的 - 您可以完全在C++/CLI中完成,但我們發現將一些本機類包裝到託管的WinForms用戶控件類中非常有用。此託管類包含本機類的一個實例,不僅在方法調用中編組數據(如字符串),而且還將本機回調(用boost :: signal實現)轉換爲.NET事件。此信號事件轉換的整個解決方案在this question中詳細說明。 .NET WinForms用戶控件還捕獲本地異常並將它們重新拋出爲託管異常,並且還將非.NET接口(返回迭代器的方法)翻譯爲更多.NET風格的接口,您可以在其中閱讀this question。然後,我們可以直接在WPF應用程序中使用.NET類。請注意,如果您將它封裝爲.NET類,它將不得不從DLL中使用C#。

2

是的,可以使用C++/CLI來管理C++代碼。您可以編寫一個C++/CLI WinForms應用程序,並按照正常情況鏈接到靜態庫中。

但是,如果在GUI代碼和庫之間有很多緊密的耦合,那麼這可能會有點混亂。您將需要擔心在託管和非託管世界之間轉換某些數據類型,特別是字符串。如果您需要通過管理對象/陣列

有關於Wikipedia和許多關於MSDN的文檔很好的介紹。

+0

訣竅還在於GUI應用程序必須從這些靜態庫中擴展一些對象,才能對從庫調用的某些回調方法作出反應。這會工作嗎? – Ma99uS 2008-10-07 14:32:50

相關問題