使用託管C 粘合C 與C

2021-08-29 10:27:33 字數 915 閱讀 7884

最近使用c++寫了乙個圖形庫,想要再給這個圖形庫做乙個編輯器,這就需要選擇乙個做視窗介面的框架,在windows上可以選擇的有mfc,qt,winform和wpf等等,mfc不想了,比較難搞定,qt不錯,還能跨平台,但是想做的快以及漂亮一點不容易,winform和wpf做出來的東西好看而且能很快做出來,但是都是用c#開發,想要跟c++互動,使用p/invoke是一種辦法,但是這只能呼叫c++ dll的匯出函式,c++中的型別都不能用,這樣肯定也不行的。

所以現在需要把c#中需要的型別和資料什麼的使用託管的c++做一遍封裝就行了,託管的c++**需要寫在 #pragma managed 的後面,託管的**寫完之後最好使用#pragma unmanaged結束,以防止後面其他引用這個檔案的檔案在編譯非託管c++時出問題,託管c++的語法和非託管的c++語法類似,如果想讓自己定義的類在c#中可以用的話,需要把類定義為 ref class,不要使用 「*」 來定義託管型別的指標,需要使用 「^」 這個符號,另外記錄一下託管c++與非託管c++幾種型別之間的轉換。

託管c++ string 轉std::string :std::string stdstr = marshal_as(clrstr);,需要 #include ,using namespace msclr::interop;

std::string 轉托管c++ string :system::string ^clrstr = gcnew system::string(stdstr.c_str());

託管c++ intptr 轉 hwnd :hwnd hwnd = (hwnd)intptr.toint32();

函式指標在c#側使用委託,並轉換成intptr傳到託管c++中,到託管c++中再轉換成對應的函式指標型別。

這樣就可以快樂的使用wpf開發介面了。

這就是我說的那個圖形庫和使用wpf編寫的編輯器的git位址,有問題歡迎批評指正!

託管c 與c 的呼叫

專案中,需要c 實現與硬體的通訊,顯示使用c 進行。查詢了相關資料,可以使用託管c 建立c 與c 之間的聯絡。基本框架如下 託管c 專案的建立請參考 注意,如果直接建立c 的dll庫,要注釋掉dllmain.cpp檔案,不然會報錯,或者建立mfc的dll。我除錯了好久,血的教訓!它介紹了建立託管c ...

託管c 與c 的轉換一

一 c 中的const char std string,與託管c string 的相互轉換 你希望c 中呼叫某個原 c 函式 readallquertdata const char pbatchname 由於c 中沒有char 型別,我們使用託管c 來進行一層封裝,託管c 可以直接呼叫原生c 的 下...

C 託管資源與非託管資源

在.net 程式設計環境中,系統的資源分為託管資源和非託管資源。託管資源 net平台中,clr為程式設計師提供了一種很好的記憶體管理機制,使得程式設計師在編寫 時不要顯式的去釋放自己使用的記憶體資源 這些在先前c和c 中是需要程式設計師自己去顯式的釋放的 這種管理機制稱為gc garbage col...