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測試環境
- 關於恐懼的自白