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

四川平台网站建设方案哪个网站可以做全网推广

四川平台网站建设方案,哪个网站可以做全网推广,wordpress无法启动,Wordpress怎么改成中文一、在Unity中使用c代码 Unity想调用C代码,则需要c开发人员打包成so库。 在Unity中通过DllImport,和dll一样调用。 需要注意的点: C代码需要extern"C"来封装成dll 因为unity默认使用c语言调用外部接口,会对c代码进行命…

一、在Unity中使用c++代码

Unity想调用C++代码,则需要c++开发人员打包成so库。
在Unity中通过DllImport,和dll一样调用。

需要注意的点:
C++代码需要extern"C"来封装成dll
因为unity默认使用c语言调用外部接口,会对c++代码进行命名矫正,使用extern"C"避免这个问题。
so在Unity中的存放路径为Plugins/Android/Libs/arm64-v8a

二、参数传递

1.结构体需对照数据类型创建。
2.参数个数和格式要一一对应,int16使用short,int32使用long, int8使用byte。
3.结构体数组,在向so传递时,使用IntPtr

三、调用用例,添加回调

回调方法需要添加声明[UnmanagedFunctionPointer(CallingConvention.cdecl)]

[DlLImport(dlName:"soTest",CallingConvention = CallingConvention.Cdect)]publi static extern bool soMethod(string str, string num, Callback callBack);
[UnmanagedFunctionPointer(CallingConvention.cdecl)]
public delegate void Callback(string msg);

四、传递结构体数组情况

1. 结构体定义与内存对齐​​

​​C++端​​:
cpp
#pragma pack(push, 1) // 强制1字节对齐,避免编译器填充字节[1,9](@ref)
struct MyStruct {int id;float value;char name[32]; // 固定长度字符数组
};
#pragma pack(pop)// 导出函数声明(确保符号可见)
extern "C" __attribute__((visibility("default"))) 
void ProcessStructArray(MyStruct* arr, int size);
​​C#端​​:
csharp
[StructLayout(LayoutKind.Sequential, Pack = 1)] // 与C++内存布局一致[1,9](@ref)
public struct MyStruct {public int id;public float value;[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] // 固定长度字符串映射[4,11](@ref)public string name;
}

2.C#端分配非托管内存并传递​​

csharp
[DllImport("MyLib", CallingConvention = CallingConvention.Cdecl)]
public static extern void ProcessStructArray(IntPtr structArray, int size);void SendData() {MyStruct[] data = new MyStruct[3];// 填充数据...// 分配非托管内存int structSize = Marshal.SizeOf(typeof(MyStruct));IntPtr buffer = Marshal.AllocHGlobal(structSize * data.Length);// 逐个复制结构体到内存[1,5](@ref)for (int i = 0; i < data.Length; i++) {IntPtr ptr = new IntPtr(buffer.ToInt64() + i * structSize);Marshal.StructureToPtr(data[i], ptr, false);}// 调用C++函数ProcessStructArray(buffer, data.Length);// 释放内存(必须手动释放)Marshal.FreeHGlobal(buffer);
}

3. C++端接收并处理数据​​

​​

cpp
void ProcessStructArray(MyStruct* arr, int size) {for (int i = 0; i < size; i++) {MyStruct& s = arr[i];// 修改数据(如数值运算)s.value *= 2.0f;printf("ID: %d, Name: %s\n", s.id, s.name);}
}

4.​​关键注意事项​​

​​内存对齐问题​​
C#必须使用[StructLayout(LayoutKind.Sequential, Pack = 1)],
C++需用#pragma pack强制对齐,确保双方结构体大小和字段偏移一致。

验证工具:通过Marshal.OffsetOf(typeof(MyStruct), “field”)检查偏移量。

​​字符串处理​​

C#字符串需用[MarshalAs(UnmanagedType.ByValTStr)]映射为固定长度字符数组,避免C++端缓冲区溢出。
​​函数导出与平台差异​​

Linux/Mac的.so库需以lib前缀命名(如libMyLib.so),C#的DllImport需省略前缀。
使用nm -D libMyLib.so检查导出符号是否存在。
​​内存管理​​
​​必须显式释放​​:Marshal.AllocHGlobal分配的内存需调用FreeHGlobal,否则导致内存泄漏。
避免野指针:传递完成后C++不应保留对内存的引用。

http://www.dtcms.com/a/466518.html

相关文章:

  • 网站安全防黑联盟广州网站开发公司哪家好
  • 实验室烧杯的种类与选择,不同材质的实验室烧杯有何优缺点?
  • 公司怎么建立网站吗新闻页面设计
  • Linux学习笔记--获取输入设备信息
  • 【Python+GEE】遥感数据计算、分析和可视化及森林监测、洪涝灾害、干旱评估、植被变化等案例
  • 基础搭建图形化编程:课程目录介绍 总纲
  • 【时时三省】(C语言基础)顺序读写数据文件
  • wordpress搬站深圳企业网站制作哪个
  • 专门做酒店的招聘网站做实验的网站
  • 行业门户网站设计开网站需要什么流程
  • 抗辐照MCU芯片在低轨商业卫星原子钟中的适配与优化
  • 成都市分类信息网站开发淘宝网页制作
  • 攻防世界-Web-easytornado
  • 溧阳市城乡建设局网站鄢陵网站建设电脑建站
  • Linux-db2look创建表结构详细参数
  • 网站新闻源码网站开发技术难度
  • 湘潭网站建设多少钱jsp 响应式网站模板
  • PCB设计流程
  • 如何做展示型网站优秀的网站通过什么提供信息
  • 租车公司网站 模板腾讯网站建设专家
  • wordpress 是CMS自己做的网站竞价优化
  • UE5 测量 -2,长度测量:P5绘制定位点之间的连线,P6增加 UI控件,显示距离数据;P7第一个点不显示距离
  • AI操作系统 | LLMs RAG DRAG
  • Python全栈(基础篇)——每日一练详解(day02~day05)
  • SpringBoot中使用Redis(引入案例)
  • 舟山外贸建站公司多梦wordpress
  • Mybatis初始
  • 多模态 AI 与金融数据融合架构研究报告
  • 工作室网站免费建设北京网站改版有什么用
  • 哪家公司做网站企业网站客户案例