C#和C++混合程式設計的一些tips
最近幫朋友寫個小東西的時候,剛好用到了C#和C++的混合程式設計,記錄一些tips供日後參考。
首先說明下環境:C#呼叫C++的庫函式,C++建立一個非託管類庫專案,C#專案引用之。
1.C++類庫中的tips
C++類庫中匯出函式的宣告如下:
extern "C" __declspec(dllexport) int* Detect(char* data,int width,int height);
需要注意的是:
要使用 extern " C " 標明,否則C#呼叫時會找不到方法名;其次要使用__declspec(dllexport)標明為匯出函式。
2.C#呼叫的tips
C#呼叫時,首先需要宣告外部方法的簽名,如下:
[DllImport("DetectDll.dll", CallingConvention = CallingConvention.Winapi)] public extern static void Detect ([MarshalAsUnmanagedType.LPArray,SizeConst=8]byte[] bp,int w,int h,[MarshalAsUnmanagedType.LPArray,SizeConst=4]int[] result);
需要注意的是:
指明CallingConvention為Winapi型別;
對於陣列型別需要指明MarshalAs的方式,一般的定長陣列或下標有上限的,都可以用LPArray來Marshal。
3.其它
呼叫非託管程式碼需要使用unsafe關鍵字,對於指標需要進行fixed限制。
「其他文章」
- rpm刪除出現”error: %preun( ) scriptlet failed, exit status 1解決方法
- C#和C 混合程式設計的一些tips
- 使用reposync同步yum源
- 對TokyoTyrant的一個簡單的patch,以支援列出所有的Key
- 關於tokyocabinet的list操作
- Clojure世界:API文件生成
- 網站分析常用英語名詞速覽
- 網站分析的應用和價值
- 新聞聚合之Google news模式與 Techmeme模式
- 楊建:網站加速--例項分析篇
- 批量替換標籤為PHPmailer顯示格式
- 過濾部分欄位重複的資料
- CSS排版:技術與最佳實踐
- 胖胡斐說淘寶促銷之一:促銷之“商”
- 我們什麼時候應該使用異常?
- 【社會化設計】自我(self)部分――邀請之傳送邀請
- 讓伺服器響應整個網段中的請求
- 使用SeaJS實現模組化JavaScript開發
- 使用windows7的virtual PC打造原裝IE6、IE7、IE8測試環境
- 關於恐懼的自白