我有一個用C++/cli編寫的windows窗體應用程序。我想用一些新的表單擴展這個應用程序,我想用C#在一個單獨的項目中創建它們。在同一解決方案中的C#項目和C++項目之間進行交互
是否可以簡單地將C#項目添加到具有C++項目的解決方案中,並且兩者將進行交互?通過交互,我的意思是說,單擊在c#項目中編寫的表單上的按鈕將能夠調用C++項目中的方法。或許以另一種方式提問,C#項目中的對象可以引用C++項目中的對象嗎?如果是這樣,你知道一個示例代碼讓我開始?
謝謝。
我有一個用C++/cli編寫的windows窗體應用程序。我想用一些新的表單擴展這個應用程序,我想用C#在一個單獨的項目中創建它們。在同一解決方案中的C#項目和C++項目之間進行交互
是否可以簡單地將C#項目添加到具有C++項目的解決方案中,並且兩者將進行交互?通過交互,我的意思是說,單擊在c#項目中編寫的表單上的按鈕將能夠調用C++項目中的方法。或許以另一種方式提問,C#項目中的對象可以引用C++項目中的對象嗎?如果是這樣,你知道一個示例代碼讓我開始?
謝謝。
是的。 C++/CLI應用程序可以通過以下兩種方式之一與C#應用程序進行交互:
如果您使用CLI擴展(從您的帖子中聽起來像是這樣),您將能夠編寫代碼新對象的引用:
管理對象:System::String^ myString
(在C++)是在C# 管理參相同string myString
:System::String% myString
相當於ref string myString
。
如果你想使用C++本地類型,那麼你將不得不使用P/Invoke,但這是一個完全不同的類別。對於你想做的事情,只需將C++項目添加爲C#項目的引用,使用託管類型在C++中編寫一個公共可見的類,然後編譯。然後,您的項目應該在您爲C++類選擇的任何名稱空間中對您的C#類可見。
編輯:哦,如果您需要通過C++分配託管對象,則需要使用gcnew
而不是new
。
這可以通過編譯一個dll與C++項目,然後讓C#應用程序加載該dll,然後它將能夠調用其導出的函數。此方法允許您的C++代碼成爲非託管代碼。
就發現,已經成立了一個樣品,我只能找到一個Visual Studio 2008項目:Microsoft All-In-One Code Framework
對於Visual Studio 2010,這裏是如何做到的C++方面:How to make a dll with C++ Using Explicit PInvoke in C++