国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

C#通過PInvoke調用c++函數的備忘錄的實例詳解

2020-01-24 00:03:05
字體:
來源:轉載
供稿:網友

目前知道的情況被調用的C/C++函數只能是全局函數 不能調用類中的成員方法

被調用的C函數必須使用extern “C“包含,保證采用的導出函數名生成規則和.NET一致

函數調用約定通常使用WINAPI也就是__stdcall,.net默認也是__stdcall

.net可以和c++同時用cdecl調用約定,這樣可以支持可變參數個數

c函數必須使用__declspec(dllexport)前綴來導出

PInvoke assistant工具可以輔助生成C#和VB的引入聲明,還可以查看常見的常量枚舉

能否調用重載的c++函數導出還沒有試驗,目前找到的信息看還是不行

字符串只支持C里的char* w_char* 不支持stl的string

各種指針句柄都可以使用C#的IntPtr UIntPtr來對應

向非托管的C傳遞字符串如果是通過變量 可以用Marshal.StringToHGlobalAuto(csstr)得到復制到非托管內存的字符串IntPtr句柄,然后可以IntPtr.ToInt32()或者IntPtr.ToInt64()方法轉成int傳遞給PInvok方式聲明的C函數調用。這個字符串的非托管副本用完之后記得在C#使用Marshal.FreeHGlobal(cstrAddr)來釋放掉。

實例參考:

C#托管內存與非托管內存之間的轉換的實例講解

http://m.survivalescaperooms.com/article/168504.htm

C#與C++與互操作實例講解

http://m.survivalescaperooms.com/article/168506.htm

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 墨脱县| 喀喇沁旗| 兴安盟| 吉林省| 太白县| 嵊泗县| 临澧县| 昭苏县| 巴东县| 青河县| 富宁县| 柳林县| 右玉县| 城市| 清新县| 桓仁| 湾仔区| 沽源县| 临沂市| 南宁市| 嘉鱼县| 天全县| 龙岩市| 南汇区| 乌拉特后旗| 汉沽区| 合江县| 湘阴县| 日喀则市| 宁化县| 电白县| 萨嘎县| 集贤县| 额济纳旗| 崇阳县| 金华市| 法库县| 榆中县| 阿坝县| 太康县| 嘉禾县|