永发信息网

C++中pbyte类型在C#对应的是什么类型。

答案:3  悬赏:20  手机版
解决时间 2021-04-01 09:53
C++中pbyte类型在C#对应的是什么类型。
最佳答案
(1)你是想在C#中调用C++ DLL中提供的函数接口吧?假如你的DLL名字为MyLib.dll,且位于系统路径中或运行目录中,那么在C#中如此写就可以调用了:

[DllImport("MyLib.dll")]
public extern static void lpOnReceiveUserData(
Intptr buffer,
Int32 sizeBuffer,
ref Byte name,
Int32 sizeSomething);

说明3点:

a。请注意参数转换,你可能注意到了我对C++中数据类型unsigned long和unsigned int 都转换为了C#中的Int32,这个基本没有问题,在我们现在用的32位操作系统中,都是4个字节,即32位;在16位系统中,是有区别的,long 为32位,int为16位,我想现在都应该基本没有人用16位的操作系统了吧,呵呵;

b。另外形参的名字是我根据此函数接口的意思加上的,也许名字命名得不太准确,但这并不影响正确使用,没有办法,原型中没有形参的名字(对于这个问题,稍后给你解释。顺便说一句:如果是故作高深其实很肤浅,当然也许DLL的作者有其特殊的原因,其意图我不可臆测 );

c。因为调用的是__stdcall函数,所以使用了P/Invoke的调用方法。其中的方法FunctionName必须声明为静态外部函数,即加上 extern static声明头。

(2)关于补充问题:
在C++中BYTE*一般写法是PBYTE(不过没有关系,反正都是正确的),其实BYTE就是unsigned char,中是这样定义BYTE的:typedef unsigned char BYTE;所以其在C#中对应参数转换为ref Byte;

给你解释一下C++ 中定义的这个函数接口:
typedef void(__stdcall *lpOnReceiveUserData)(void *, unsigned long, unsigned char *, unsigned int);

返回值为void,即无返回值;

__stdcall为函数的调用规范,Windows中的WINAPI宏就是被定义为__stdcall的(有这样的宏定义:#define WINAPI __stdcall),这个调用规范定义的函数接口是标准的windows API;

至于参数列表中只有类型,而没有形参名,这是因为对编译器来说,只对形参类型敏感,而形参名字其实是别忽略的,所以写不写对编译器来说都是一样的,但是程序另一方面也是写给人看的,所以作为好习惯呢,还是要写上有意义的形参名最好!
追问哦,多谢。。。。。。 在问一下:C++中的CHAR* 在C#里应该用什么类型表示?
全部回答
对应C#的byte[]追问不能吧,我上网查了一下是System.Int16[]类型啊。刚开始我也以为是Byte[] ,但是程序运行会出错。
1、这是windows程序设计里的,自己也可以自定义类似的类型,主要是用来表示无符号单字节数值。
2、例如:
typedef unsigned char BYTE;
typedef BYTE * PBYTE;
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
有用过的朋友,给个建议。。爱生气,长斑,掉
道家对于仕与隐的看法?
岳父知道我喜欢老东西,给了我一些他说放了很
php中关闭当前浏览器的窗口
杭州二手设备仪器进口报关清关厣蠹勰芄怎么过
大家有没有在各款手机斗地主或者棋牌中发现一
有约在先是什么意思
适合小胸的内衣品牌
茶蛋是不是跟防弹买了枯叶的版权然后改编成 t
生完孩子 喂完奶 我的胸太难看了 又小而没有
力对轴的矩的的方向(正负)怎样判定
mc白浩yy频道多少
买二手观致3哪些问题需要注意
李颙的学术思想
显示器:三星S24B300BL, 23.6寸和AOC(冠捷)
推荐资讯
您好老师,请问在吗?
求TVB翡翠台的动画片讲述太空船的
苹果红薯大米粥能在一起吃吗?
美国电影生活伴侣百度云网盘
风景G7商务接待怎么样?
因需要修砌堡坎,可是一年后垮塌,只有口头合
WWE里面的吉米乌索和杰乌索好像比以前瘦了很
康佳饭店这个地址在什么地方,我要处理点事
义乌市集集小镇工资规定,一星期内辞职会发工
养殖泥鳅一亩田成本大慨要多少 ?
韩国学生为什么表示想穿中国校服?
欠债以物抵债,债主不要东西只要现金怎么办
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?