C语言C#参数对照表

C++ 与 C#类型对应(项目中亲自测试过)   一、C#调用C++的DLL搜集整理并测试通过的数据类型转换方式,可能不太全,大家可以多测试。 C++ C# Int32_t Int/Intptr Int32_t & ref InPtr /out Inptr const char* ... 阅读详情
 static_cast: 非强制转换,窄化转化,void*强制变换
const_cast:对const,volatile进行转换
reinterpret_cast:转换为完全不同的意思.
dynamic_caset:用于类型安全的向下转换.


static_cast<int>(i);
static_case<char>(i);



3. char* a[]
  atoi,atol,atof分别把字符数组转换为int,long,float类型
  atoi(a[1])

  //C++中的DLL函数原型为
  //extern "C" __declspec(dllexport) bool 方法名一(const char* 变量名1, unsigned char* 变量名2)
  //extern "C" __declspec(dllexport) bool 方法名二(const unsigned char* 变量名1, char* 变量名2)

  //C#调用C++的DLL搜集整理的所有数据类型转换方式,可能会有重复或者多种方案,自己多测试
  //c++:HANDLE(void *) ---- c#:System.IntPtr 
  //c++:Byte(unsigned char) ---- c#:System.Byte 
  //c++:SHORT(short) ---- c#:System.Int16 
  //c++:WORD(unsigned short) ---- c#:System.UInt16 
  //c++:INT(int) ---- c#:System.Int16
  //c++:INT(int) ---- c#:System.Int32 
  //c++:UINT(unsigned int) ---- c#:System.UInt16
  //c++:UINT(unsigned int) ---- c#:System.UInt32
  //c++:LONG(long) ---- c#:System.Int32 
  //c++:ULONG(unsigned long) ---- c#:System.UInt32 
  //c++:DWORD(unsigned long) ---- c#:System.UInt32 
  //c++: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(const char *) ---- c#:System.String 
  //c++:LPCWSTR(const wchar_t *) ---- c#:System.String 
  //c++:PCAHR(char *) ---- c#:System.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 输出变量名 ---- c#:StringBuilder 输出变量名
  //c++:LPCWSTR ---- c#:IntPtr
  //c++:BOOL ---- c#:bool  
  //c++:HMODULE ---- c#:IntPtr  
  //c++:HINSTANCE ---- c#:IntPtr 
  //c++:结构体 ---- c#:public struct 结构体{}; 
  //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#:string
  //c++:UCHAR* ---- c#:IntPtr

  //c++:GUID ---- c#:Guid
  //c++:Handle ---- c#:IntPtr
  //c++:HWND ---- c#:IntPtr
  //c++:DWORD ---- c#:int
  //c++:COLORREF ---- c#:uint


  //c++:unsigned char ---- c#:byte
  //c++:unsigned char * ---- c#:ref byte
  //c++:unsigned char * ---- c#:[MarshalAs(UnmanagedType.LPArray)] byte[]
  //c++:unsigned char * ---- c#:[MarshalAs(UnmanagedType.LPArray)] Intptr

  //c++:unsigned char & ---- c#:ref byte
  //c++:unsigned char 变量名 ---- c#:byte 变量名
  //c++:unsigned short 变量名 ---- c#:ushort 变量名
  //c++:unsigned int 变量名 ---- c#:uint 变量名
  //c++:unsigned long 变量名 ---- c#:ulong 变量名

  //c++:char 变量名 ---- c#:byte 变量名 //C++中一个字符用一个字节表示,C#中一个字符用两个字节表示
  //c++:char 数组名[数组大小] ---- c#:MarshalAs(UnmanagedType.ByValTStr, SizeConst = 数组大小)] public string 数组名; ushort

  //c++:char * ---- c#:string //传入参数
  //c++:char * ---- c#:StringBuilder//传出参数
  //c++:char *变量名 ---- c#:ref string 变量名
  //c++:char *输入变量名 ---- c#:string 输入变量名
  //c++:char *输出变量名 ---- c#:[MarshalAs(UnmanagedType.LPStr)] StringBuilder 输出变量名

  //c++:char ** ---- c#:string
  //c++:char **变量名 ---- c#:ref string 变量名
  //c++:const char * ---- c#:string
  //c++:char[] ---- c#:string
  //c++:char 变量名[数组大小] ---- c#:[MarshalAs(UnmanagedType.ByValTStr,SizeConst=数组大小)] public string 变量名;

  //c++:struct 结构体名 *变量名 ---- c#:ref 结构体名 变量名
  //c++:委托 变量名 ---- c#:委托 变量名

  //c++:int ---- c#:int
  //c++:int ---- c#:ref int
  //c++:int & ---- c#:ref int
  //c++:int * ---- c#:ref int //C#中调用前需定义int 变量名 = 0;

  //c++:*int ---- c#:IntPtr
  //c++:int32 PIPTR * ---- c#:int32[]
  //c++:float PIPTR * ---- c#:float[]
   

  //c++:double** 数组名 ---- c#:ref double 数组名
  //c++:double*[] 数组名 ---- c#:ref double 数组名
  //c++:long ---- c#:int
  //c++:ulong ---- c#:int
   
  //c++:UINT8 * ---- c#:ref byte //C#中调用前需定义byte 变量名 = new byte();  


  //c++:handle ---- c#:IntPtr
  //c++:hwnd ---- c#:IntPtr
   
   
  //c++:void * ---- c#:IntPtr  
  //c++:void * user_obj_param ---- c#:IntPtr user_obj_param
  //c++:void * 对象名称 ---- c#:([MarshalAs(UnmanagedType.AsAny)]Object 对象名称


   
  //c++:char, INT8, SBYTE, CHAR ---- c#:System.SByte 
  //c++:short, short int, INT16, SHORT ---- c#:System.Int16 
  //c++:int, long, long int, INT32, LONG32, BOOL , INT ---- c#:System.Int32 
  //c++:__int64, INT64, LONGLONG ---- c#:System.Int64 
  //c++:unsigned char, UINT8, UCHAR , BYTE ---- c#:System.Byte 
  //c++:unsigned short, UINT16, 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, long double, DOUBLE ---- c#:System.Double 

  //Win32 Types ---- CLR Type  
   

  //Struct需要在C#里重新定义一个Struct
  //CallBack回调函数需要封装在一个委托里,delegate static extern int FunCallBack(string str);

  //unsigned char** ppImage替换成IntPtr ppImage
  //int& nWidth替换成ref int nWidth
  //int*, int&, 则都可用 ref int 对应
  //双针指类型参数,可以用 ref IntPtr
  //函数指针使用c++: typedef double (*fun_type1)(double); 对应 c#:public delegate double fun_type1(double);
  //char* 的操作c++: char*; 对应 c#:StringBuilder;
  //c#中使用指针:在需要使用指针的地方加 unsafe


  //unsigned char对应public byte
  /*
  * typedef void (*CALLBACKFUN1W)(wchar_t*, void* pArg);
  * typedef void (*CALLBACKFUN1A)(char*, void* pArg);
  * bool BIOPRINT_SENSOR_API dllFun1(CALLBACKFUN1 pCallbackFun1, void* pArg);
  * 调用方式为
  * [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
  * public delegate void CallbackFunc1([MarshalAs(UnmanagedType.LPWStr)] StringBuilder strName, IntPtr pArg);
  * 

C#与C++之间传递字符串的方法——string、wchar_t*、char*、IntPtr 在上述示例中,C++的DLL代码定义了一个名为DisplayString的函数,该函数接收一个wchar_t*类型的字符串,并打印出来。然后,使用Marshal类的相关方法将字节数组拷贝到分配的内存中,并添加字符串结尾的’\0’。通过上述示例,我们介绍了在C#与C++之间传递字符串的几种常用方法,分别使用了string、wchar_t*、char*和IntPtr类型。而在C#代码中,我们首先将string类型的字符串转换为字节数组,然后将字节数组的指针传递给DisplayString函数。 阅读详情

相关推荐

C语言char类型解析及C#中的等效类型

C语言中的char类型是一种8位整数类型,用于表示字符数据。它可以存储ASCII字符集中的字符,并用于处理基本的字符串操作。在C#中,char类型表示一个16位的Unicode字符。它支持更广泛的字符集,并提供了更高层次的抽象和功能。通过本文的解析,我们了解了C语言中的char类型及其在C#中的等效类型。希望这对你有所帮助!如果你对其他问题有疑问,请随时提问。

PixelProX的博客 373

兴许有用,先记着。

static_cast: 非强制转换,窄化转化,void*强制变换 const_cast:对const,volatile进行转换 reinterpret_cast:转换为完全不同的意思. dynamic_caset:用于类型安全的向下转换. static_cast(i); static_case(i); 3. char* a[]   atoi,atol,atof分

活得痛快的专栏 1231

【生产实践】SSH服务弱加密算法修复指南(附完整操作流程)

SSH服务弱加密算法漏洞修复方案 检测发现SSH服务存在支持弱加密算法漏洞,主要风险包括: 使用arcfour、aes128-cbc等易被破解的算法 面临密钥恢复、重放攻击等安全威胁 提供两种修复方案: 推荐方案:升级OpenSSH至最新版本 替代方案:修改SSH配置禁用弱算法(需注意可能影响旧客户端连接) 修复步骤: 编辑/etc/ssh/sshd_config 注释或删除弱算法配置 添加强加密算法(如aes128-ctr等) 重启SSH服务 注意事项: 建议先在测试环境验证 可能需配合客户端升级 操作前

SunMy的博客 3095

C++与C#类型对应

C++中char*作为出参类型,C#可以使用[MarshalAs(UnmanagedType.LPStr)] StringBuilder C#读取文件内容到byte[],C++接口的入参为char*,C#可使用[MarshalAs(UnmanagedType.LPArray)] byte[] 附: //c++:HANDLE(void *) ---- c#:System.IntPtr //c++:Byte(unsigned char...

paltan的专栏 5850

渗透测试实战—云渗透(AK/SK泄露)

渗透测试实战思路分享:getshell方法及横向移动方法,云安全(AK/SK泄露)

网安日记本的博客 4050

128x64 OLED屏的救星:手把手教你用纯C实现轻量级多级菜单

本文针对资源受限的单片机开发场景,提供了一套用纯C语言实现128x64 OLED屏轻量级多级菜单的完整方案。该方案摒弃了传统的树形指针结构,创新性地采用哈希表进行菜单项管理,核心代码不足200行,内存占用极低,逻辑清晰且易于维护。文章详细阐述了架构设计、实战演练及性能优化技巧,是STM32、ESP8266等小内存MCU项目的理想选择。

table的专栏 226

C#与C++和C语言之间数据类型的对应

这个真的很有用啊, 一、C#与C++数据类型的对应表   Windows Data Type .NET Data Type BOOL, BOOLEAN Boolean or Int32 BSTR String BYTE Byte CHAR Ch

liguo9860的专栏 2993

利用WI生成无线信道数据

选取DeepMIMO的一个射线追踪场景O1(Outdoor 1)Scenario,工作频率为3.5GHz。有两条街和一个十字路口的户外场景18个基站和超过一百万个用户18个基站(BSs):BS1-BS18.每个基站的高度是8米每个基站的天线阵列是isotropic天线三个统一的x-y用户网格用户的总计数量为:1184923每个用户网格中的第一个用户总是(x,y)坐标最低的用户 所有用户的高度是2m每个用户的每个天线阵列是isotropic天线定义射频追踪场景。

bingbingaidaima的博客 5603

C#调用DLL文件时参数对应表

C#调用DLL文件时参数对应表 Wtypes.h中的非托管类型 非托管 C语言类型 托管类名 说明 HANDLE void* System.IntPtr 32

深海蓝的技术随笔 562

64.qt quick-qml使用高德地图插件实现V2版本(新增:位置搜索、路径规划、轨迹编辑等)

qt quick-qml高德地图插件(新增:位置搜索、路径规划、轨迹编辑等) Qt地图插件,使用简单方便,不用浏览器内核,运行高效迅速 跨平台支持,(Qt Windows(MinGW, MSVC)\Linux(桌面、嵌入式)\Android\IOS\等) 在线更新瓦片地图下载,并且支持缓存保存离线地图实现.........

抵抗时间扭曲,坚持做一件有意义的事 6129

B.3【智能标注】:基于Labelstudio的UIE半监督深度学习的智能标注方案(云端版),提效。

Label Studio 所提供的 Machine Learning Backend 提供了一个比较灵活的辅助人工标注的框架,我们通过它确实可以加快 nlp 数据的标注Label Studio 的 enterprise 版本提供了 Active Learning 的流程,不过从其描述看这个流程并不完美,尤其是 fit 部分,由于 Label Studio 低估了「Train」所花费的时间,所以每次标注都自动训练的流程可能并不会那么顺滑(会在链接时候等待一段时间)

丨汀、的博客 1840

c#c语言参数对照表

static_cast: 非强制转换,窄化转化,void*强制变换 const_cast:对const,volatile进行转换 reinterpret_cast:转换为完全不同的意思. dynamic_caset:用于类型安全的向下转换. static_cast(i); static_case(i); 3. char* a[]   atoi,atol,atof分

a848691591的专栏 690

凝聚态物理新引擎:AI 驱动材料预测与相变识别大突破

摘要:本文深入探讨 AI 在凝聚态物理中的创新应用。在材料性质预测方面,AI 借助数据收集、特征提取和模型训练,能依据材料微观信息准确预估其宏观性质,以石墨烯为例验证了高效性。对于拓扑相变识别,AI 通过分析量子力学数据,利用机器学习算法判别相变节点,助力拓扑绝缘体研究。尽管面临数据质量、模型可解释性等挑战,但未来多模态数据融合、可解释 AI 等发展方向,将推动 AI 与凝聚态物理深度融合,助力探索物质奥秘与新材料研发。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1826

C#与C++之间类型的对应表

Windows Data Type .NET Data Type BOOL, BOOLEAN Boolean or Int32 BSTR String BYTE Byte CHAR Char DOUBLE Double DWORD

wchengtan的专栏 2005

数据结构(超详细讲解!!)第十七节 队列应用(杨辉三角)

杨辉三角

2201_76115387的博客 1375

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

c# 调用 C++ dll 传入传出 字符串

C#调用 非托管C++ dll 传入Stringbuilder、ref string 、 ref char 等都报错,如mscorlib.dll 异常、其他信息: 尝试读取或写入受保护的内存。这通常指示其他内存已损坏 等等,后来发现是dll 生成后一直没更新,放错位置了。。。 = =|| 不过也学习了一下编译器及类型相关的知识,整理如下: 1、 cl.exe /Gz 参数指定编译为 __...

youandme520的专栏 730

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

C#与C/C++类型对照表

C++            C#=====================================WORD            ushortDWORD            uintUCHAR            int/byte   大部分情况都可以使用int代替,而如果需要严格对齐的话则应该用bytebyte UCHAR*            string/IntPtrunsi...

weixin_34293246的博客 134

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

C#调用C++的DLL 尝试写入受保护的内存

原因:C#中的声明函数的参数类型与C++的函数的参数类型不一致,在参照C#与C++的参数类型对照表以后,修改相应参数类型,问题解决 转载于:https://www.cnblogs.com/BlogLwc/p/8964192.html...

weixin_30855099的博客 309

C#与C++类型对应表

在使用.Net互操作时,经常涉及到一些C++到C#的类型转换问题,为了以后方便查询,现将一些资源整理如下: C++与C#数据类型对照表 C++数据类型 C#数据类型 WORD ushort DWORD uint UCHAR int/byte ...

aiman5818的博客 197

c#调用C++DLL参数对应

//C++中的DLL函数原型為 //extern “C” __declspec(dllexport) bool 方法名一(const char* 变量名1, unsigned char* 变量名2) //extern “C” __declspec(dllexport) bool 方法名二(const unsigned char* 变量名1, char* 变量名2)...

weixin_34265814的博客 230

c语言程序设计教程王曙燕,C语言程序设计

《C语言程序设计(第2版)》共13章,主要内容包括C语言的基本概念、基本语法和基本数据结构、C和汇编语言的混合编程、编译预处理等知识,并给出了一个小型超市管理的综合实例,介绍了C语言图形程序设计的基本方法,还简单介绍了C++、Visual C++和C#等面向对象程序设计语言。  《C语言程序设计(第2版)》注重应用性和实践性,通过一些典型算法的解题分析及其实现给读者一些解题示范和启发。每章后面配有...

weixin_39662263的博客 716

C++和C#变量对应表

是静态类型转换,发生在编译期。这种转换不会进行运行时的动态检查(RTTI),因而这种转换可能是不安全的。转换直接对二进制位按照目标类型重新解释,非常粗暴,所以风险很高,慎重使用。提供了运行时的检查。对于指针类型,在运行时会检查。类型的对象,如果是,则能进行正确的转换;对于引用类型,若是无效转换,则在运行时会抛出异常。必须是类的指针、类的引用或者是。

qq_44544908的博客 1307

C++ 类型 和 C#类型 互转

Windows Data Type .NET Data Type BOOL, BOOLEAN Boolean or Int32 BSTR String BYTE Byte CHAR Char DOUBLE Double DWORD Int32 or UInt32 FLOAT Single H...

二等碗 836

C#调用C++的DLL搜集整理的所有数据类型转换方式(转)

C#调用C++的DLL搜集整理的所有数据类型转换方式 搜集整理的代码会是很不错的文章,花了一天时间,搜索到最后居然出来一篇叫做"C# 与 C++ 数据类型对照表"的文章.几乎囊括掉和大部分的数据了,太打击我了. 本文中有部分的数据没有测试.也有一些不错的是看了上百篇网文对比整理得来的.希望有帮助. //C++中的DLL函数原型为 //extern "C" __declspec(dl...

ygtu2018的博客 1229
上一篇: FileVersionInfo类显示dll信息
Daqing
博客等级 码龄17年 28粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值