《2022年C#调用C的DLL搜集整理的所有数据类型转换 .pdf》由会员分享,可在线阅读,更多相关《2022年C#调用C的DLL搜集整理的所有数据类型转换 .pdf(6页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、/C+中的 DLL函数原型为/externC _declspec(dllexport)bool 方法名一(constchar*变量名 1,unsigned char*变量名 2)/externC _declspec(dllexport)bool 方法名二(constunsigned char*变量名 1,char*变量名 2)/C#调用 C+的 DLL搜集整理的所有数据类型转换方式,可能会有重复或者多种方案,自己多测试/c+:HANDLE(void*)-c#:System.IntPtr/c+:Byte(unsignedchar)-c#:System.Byte/c+:SHORT(short)-c
2、#:System.Int16/c+:WORD(unsignedshort)-c#:System.UInt16/c+:INT(int)-c#:System.Int16/c+:INT(int)-c#:System.Int32/c+:UINT(unsignedint)-c#:System.UInt16/c+:UINT(unsignedint)-c#:System.UInt32/c+:LONG(long)-c#:System.Int32/c+:ULONG(unsignedlong)-c#:System.UInt32/c+:DWORD(unsignedlong)-c#:System.UInt32/c+:
3、DECIMAL-c#:System.Decimal/c+:BOOL(long)-c#:System.Boolean/c+:CHAR(char)-c#:System.Char/c+:LPSTR(char*)-c#:System.String/c+:LPWSTR(wchar_t*)-c#:System.String/c+:LPCSTR(constchar*)-c#:System.String/c+:LPCWSTR(constwchar_t*)-c#:System.String名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 6 页 -/c+:PCAHR(char*)-c#:System
4、.String/c+:BSTR-c#:System.String/c+:FLOAT(float)-c#:System.Single/c+:DOUBLE(double)-c#:System.Double/c+:VARIANT-c#:System.Object/c+:PBYTE(byte*)-c#:System.Byte/c+:BSTR-c#:StringBuilder/c+:LPCTSTR-c#:StringBuilder/c+:LPCTSTR-c#:string/c+:LPTSTR-c#:MarshalAs(UnmanagedType.LPTStr)string/c+:LPTSTR 输出变量名
5、-c#:StringBuilder输出变量名/c+:LPCWSTR-c#:IntPtr/c+:BOOL-c#:bool/c+:HMODULE-c#:IntPtr/c+:HINSTANCE-c#:IntPtr/c+:结构体-c#:publicstruct结构体;/c+:结构体*变量名-c#:out变量名/C#中提前申明一个结构体实例化后的变量名/c+:结构体&变量名-c#:ref结构体 变量名/c+:WORD-c#:ushort/c+:DWORD-c#:uint/c+:DWORD-c#:int/c+:UCHAR-c#:int/c+:UCHAR-c#:byte/c+:UCHAR*-c#:strin
6、g/c+:UCHAR*-c#:IntPtr/c+:GUID-c#:Guid/c+:Handle-c#:IntPtr/c+:HWND-c#:IntPtr/c+:DWORD-c#:int/c+:COLORREF-c#:uint名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 6 页 -/c+:unsignedchar-c#:byte/c+:unsignedchar*-c#:refbyte/c+:unsignedchar*-c#:MarshalAs(UnmanagedType.LPArray)byte/c+:unsignedchar*-c#:MarshalAs(UnmanagedType
7、.LPArray)Intptr/c+:unsignedchar&-c#:refbyte/c+:unsignedchar 变量名-c#:byte变量名/c+:unsignedshort变量名-c#:ushort变量名/c+:unsignedint变量名-c#:uint变量名/c+:unsignedlong 变量名-c#:ulong变量名/c+:char变量名-c#:byte变量名/C+中一个字符用一个字节表示,C#中一个字符用两个字节表示/c+:char数组名 数组大小-c#:MarshalAs(UnmanagedType.ByValTStr,SizeConst=数组大小)publicstrin
8、g数组名;ushort/c+:char*-c#:string/传入参数/c+:char*-c#:StringBuilder/传出参数/c+:char*变量名-c#:refstring变量名/c+:char*输入变量名-c#:string输入变量名/c+:char*输出变量名-c#:MarshalAs(UnmanagedType.LPStr)StringBuilder输出变量名/c+:char*-c#:string/c+:char*变量名-c#:refstring变量名/c+:constchar*-c#:string/c+:char-c#:string/c+:char变量名 数组大小-c#:Ma
9、rshalAs(UnmanagedType.ByValTStr,SizeConst=数组大小)publicstring变量名;名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 6 页 -/c+:struct结构体名*变量名-c#:ref结构体名 变量名/c+:委托 变量名-c#:委托 变量名/c+:int-c#:int/c+:int-c#:refint/c+:int&-c#:refint/c+:int*-c#:refint/C#中调用前需定义 int变量名=0;/c+:*int-c#:IntPtr/c+:int32PIPTR*-c#:int32/c+:floatPIPTR*-c#:
10、float/c+:double*数组名-c#:refdouble 数组名/c+:double*数组名-c#:refdouble 数组名/c+:long-c#:int/c+:ulong-c#:int/c+:UINT8*-c#:refbyte/C#中调用前需定义byte 变量名=newbyte();/c+:handle-c#:IntPtr/c+:hwnd-c#:IntPtr/c+:void*-c#:IntPtr/c+:void*user_obj_param-c#:IntPtruser_obj_param/c+:void*对象名称-c#:(MarshalAs(UnmanagedType.AsAny)
11、Object对象名称/c+:char,INT8,SBYTE,CHAR-c#:System.SByte/c+:short,shortint,INT16,SHORT-c#:Sys名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 6 页 -tem.Int16/c+:int,long,longint,INT32,LONG32,BOOL,INT-c#:System.Int32/c+:_int64,INT64,LONGLONG-c#:System.Int64/c+:unsignedchar,UINT8,UCHAR,BYTE-c#:System.Byte/c+:unsignedshort,UIN
12、T16,USHORT,WORD,ATOM,WCHAR,_wchar_t-c#:System.UInt16/c+:unsigned,unsigned int,UINT32,ULONG32,DWORD32,ULONG,DWORD,UINT-c#:System.UInt32/c+:unsigned_int64,UINT64,DWORDLONG,ULONGLONG-c#:System.UInt64/c+:float,FLOAT-c#:System.Single/c+:double,longdouble,DOUBLE-c#:System.Double/Win32Types-CLRType/Struct需
13、要在 C#里重新定义一个 Struct/CallBack回调函数需要封装在一个委托里,delegate staticexternintFunCallBack(stringstr);/unsignedchar*ppImage替换成 IntPtrppImage/int&nWidth 替换成 refintnWidth/int*,int&,则都可用refint对应/双针指类型参数,可以用refIntPtr/函数指针使用 c+:typedef double(*fun_type1)(double);对应 c#:publicdelegatedoublefun_type1(double);/char*的操作
14、c+:char*;对应 c#:StringBuilder;/c#中使用指针:在需要使用指针的地方加 unsafe/unsignedchar 对应 publicbyte/*typedefvoid(*CALLBACKFUN1W)(wchar_t*,void*pArg);*typedefvoid(*CALLBACKFUN1A)(char*,void*pArg);名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 6 页 -*bool BIOPRINT_SENSOR_APIdllFun1(CALLBACKFUN1pCallbackFun1,void*pArg);*调用方式为*UnmanagedFunctionPointer(CallingConvention.Cdecl)*publicdelegatevoidCallbackFunc1(MarshalAs(UnmanagedType.LPWStr)StringBuilderstrName,IntPtrpArg);*/名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 6 页 -