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

企业建站官网运营朋友圈广告投放

企业建站官网运营,朋友圈广告投放,网站模板复制,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.tj-hxxt.cn/news/97636.html

相关文章:

  • 做搜索网站app推广方法及技巧
  • 公司网站建设应注意西安网站建设制作
  • 网站咨询窗口怎么做超级外链工具 增加外链中
  • 美容院网站建设方案书策划网络营销活动
  • 安全可靠网站认证域名备案查询
  • 帝国网站模板建设完成显示不正常seo网络推广机构
  • 网站的建设与维护实践报告谷歌外贸seo
  • 哪里可以找到做网站的成都网站快速排名
  • 花都网站开发公司百度快照官网
  • 免费建域名网站最近一周热点新闻
  • 网站建设长春营销渠道的三个类型
  • 建e网室内设计网免下载费seo快速排名优化公司
  • 无锡网站的建设做网站需要多少钱
  • 城市规划建设网站关键词排名是由什么决定的
  • 做英雄联盟网站的图片素材人力资源培训与开发
  • 深圳网站建设托管百度河南代理商
  • 专业集团网站建设做网络推广
  • 在泰安市有做阿里巴巴网站的攀枝花网站seo
  • 宁波网站设计企业模板建站难吗
  • 陕西网站开发公司地址网络营销推广的渠道有哪些
  • java做网站快不快内容营销策略有哪些
  • 建设大型网站怎样赢利友情链接的方式如何选择
  • 广州外贸推广seo如何挖掘关键词
  • c 做的web网站怎么发布网站很卡如何优化
  • php开源企业网站系统360seo排名优化服务
  • 比较常见的网页制作工具苏州seo关键词优化方法
  • 长沙 做营销型网站的公司百度网盘客服电话24小时
  • 公司做网站建设价格网络营销到底是个啥
  • 快速搭建网站demo绍兴seo外包
  • 凯里哪里有做网站的效果好的关键词如何优化