当前位置: 首页 > news >正文

360网站推广电话lnmp wordpress 换域名

360网站推广电话,lnmp wordpress 换域名,企业邮箱地址怎么填,网站开发项目经理招聘C#在和C进行交互时,有时候会需要传递结构体。 做一些总结,避免大家在用的时候踩坑。 一般情况 例如我们在C里定义了一个struct_basic结构体 1 struct struct_basic 2 { 3 WORD value_1; 4 LONG value_2; 5 DWORD value_3; 6 UINT v…

C#在和C++进行交互时,有时候会需要传递结构体。

做一些总结,避免大家在用的时候踩坑。

一般情况

例如我们在C++里定义了一个struct_basic结构体

1 struct struct_basic
2 {
3     WORD  value_1;
4     LONG  value_2;
5     DWORD value_3;
6     UINT  value_4;
7     BOOL  value_5;
8 };

这种情况在C#里调用,只需要注意数据类型对应就行了

在C#里定义如下

1  struct struct_basic
2     {
3         public ushort value_1;
4         public int value_2;
5         public uint value_3;
6         public uint value_4;
7         public bool value_5;
8     }

使用导出函数来测试一下

 1 extern "C" __declspec(dllexport) void get_basic(struct_basic basic);2 3 extern "C" __declspec(dllexport) void get_basic(struct_basic basic)4 {5     basic.value_1 = 1;6     basic.value_2 = 2;7     basic.value_3 = 3;8     basic.value_4 = 4;9     basic.value_5 = FALSE;
10 }

在C#中调用

        [DllImport("lib.dll")]public static extern void get_basic(ref struct_basic basic);static void Main(string[] args){struct_basic basic = new struct_basic();get_basic(ref basic);Console.WriteLine($"{basic.value_1}  {basic.value_2}  {basic.value_3}  {basic.value_4}  {basic.value_5}");}

输出结果如下:

包含字符串的情况

C++

1 struct struct_advanced
2 {
3     WORD id;
4     CHAR message[256];
5 };

这种需要使用MarshalAsAttribute特性来指示如何在托管代码与非托管代码之间封送数据。

UnmanagedType.ByValTStr表示 结构中大小固定的字符串
SizeConst可以指定字符数组的大小说明:
如果未指定CharSet,默认使用的是Ansi(char)。
Unicode为w_char。

C#

1     [StructLayout(LayoutKind.Sequential,CharSet=CharSet.Unicode)]
2     struct struct_advanced
3     {
4         public ushort id;
5 
6         [MarshalAs(UnmanagedType.ByValTStr,SizeConst =256)]
7         public string message;
8     };

使用导出函数测试

C++

1 extern "C" __declspec(dllexport) void get_advanced(struct_advanced* advanced);
2 
3 extern "C" __declspec(dllexport) void get_advanced(struct_advanced* advanced)
4 {
5     advanced->id = 101;
6     lstrcpyW(advanced->message, L"HelloWorld");
7 }

在C#中调用

 1  class Program2     {3         [DllImport("lib.dll")]4         public static extern void get_advanced(ref struct_advanced advanced);5 6         static void Main(string[] args)7         {8             struct_advanced advanced = new struct_advanced();9             get_advanced(ref advanced);
10             Console.WriteLine($"{advanced.id}  {advanced.message}");
11         }
12     }

输出结果:

示例代码

http://www.yayakq.cn/news/809625/

相关文章:

  • 有人上相亲网站做传销燕窝做网站需要视频衔接怎么做
  • 建设网站群公司比较好
  • 做网站建设公司crm在线的提升服务网站单页面可以做302跳转吗
  • 个人博客网站取名做招投标有哪些网站
  • 途牛网网站建设评价中国建设银行网站特点
  • 国外装饰公司网站桂林百姓网
  • 利用电脑做网站wordpress主题云落
  • wordpress网站服务时间做直播哪个网站好
  • 响应式网站 英文衡水移动网站建设
  • 汉口网站建设 优帮云买毕业设计的网站
  • 海南做网站的公司友汇网站建设
  • 在线做爰 视频网站如何做品牌推广方案
  • 产品类网站模板网站静态界面挖取
  • vs开发网站开发教程系统炸了我成了系统
  • 南京企业制作网站wordpress wiki主题
  • 门户网站 模板之家域名解析好了怎么做网站
  • 官方静态网站模板网站开发市场成本
  • php网站开发视频教学邯郸企业做网站费用
  • 重庆博达建设集团网站国外外贸平台有哪些
  • 杂志媒体网站建设方案比较好网站制作公司
  • 什么网站可以找人做设计装修公司大全
  • 常州外贸网站建设mvc做网站前台代码
  • 视频门户网站建设服务器长沙景点大全 长沙景点排名
  • 在线网站设计wordpress通知插件
  • 专业做公司网站长沙网站建设规划
  • 免费建设网站和域名哪个网站有利于做课件
  • 中餐网站模板服装配件网站建设 中企动力
  • 网站栏目设计怎么写烟台网站排名
  • 网站做301跳转需解析常熟网站开发
  • 深圳创意网站从零开始学ui设计