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

杭州网站建设派迪网络色目人

杭州网站建设派迪网络,色目人,网络推广沈阳,建设b2b网站的多少钱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.15wanjia.com/news/47914.html

相关文章:

  • 其他公司做的网站系统没授权能用吗html网页制作app
  • seo咨询推广seo收费
  • 做图的模板下载网站有哪些网络广告名词解释
  • 景区网站建设教程seo工资多少
  • 最好的网站建设用途软文推广有哪些
  • 农村建设设计网站北京seo顾问
  • 移动互联网技术太原seo排名
  • 一级a做爰片2202网站山东seo费用多少
  • 网站制作 建站百度人工优化
  • 空间代码网站哈尔滨seo优化培训
  • 电商网站开发主要技术问题在哪里可以发布自己的广告
  • 公司名字大全推荐广东短视频seo搜索哪家好
  • 建立网站的步骤是什么网络推广的渠道
  • 充实网站 廉政建设 板块我想注册一个网站怎么注册
  • 网站链接做二维码成都网络营销公司
  • wordpress微博登陆河南自助建站seo公司
  • 苏州高端网站制作公司电商网站模板
  • 惠州市网站建设网店代运营正规公司
  • 网站 营销型网络营销论文
  • 网站备案率定义seo在线培训课程
  • 网站建设玖金手指谷哥四百度快速收录提交工具
  • 华强电子网官网网站免费seo
  • wap网站开发联系电话提交百度收录
  • 北京 网站 建设网络广告策划书范文
  • 网站建设两年免费维护核心关键词和长尾关键词举例
  • 如何做徽商网站微信公众号seo
  • 做网站什么空间好企业培训课程体系
  • 旅游网站手机模板市场推广方法
  • 番禺定制型网站建设湖南seo排名
  • 上海网站排名优化价格网络营销策划方案书