Unity中免不了需要C#和OC或者Java代码交互,最近发现与OC交互的部分代码有兼容问题,在64位机器上测试没问题,不过在32位机器上测试就必然奔溃,最后定位到了一个方法里的long参数,因为它前面的参数都没问题,它和它之后的参数内容和正确的内容完全对不上。

//C#
[DllImport ("__Internal")]
private static extern void _test(int a, string b, long c, long d, int e, string f, string g, int h, int i, int g, int k);//OC
extern "C"
{void _test(int a, const char* b, long c, long d, int e, const char* f, const char* g, int h, int i, int g, int k){}
}

既然找到了症结所在,第一种方法,将所有long类型参数改为string传递,经测试可以有效的绕过这个问题。

后来研究了一下unity打包xocde工程的il2cpp代码,发现il2cpp将c#的int转成了_int_32,而long则转成了_int_64,看了看_int_64的定义发现是long long,后来又看了下C#文档对于int和long的定义,int是有符号32位整数,long是有符号64位整数,依稀记得C的long和int是一样的,查了下OC里int和long也是一样的,这样就大致可以知道问题所在了,C#的long和OC的long长度不一样。

所以第二种方法,将oc中的long类型改为long long类型,也可以解决这个问题。

最后还是有一点疑问,就是我调试了下il2cpp代码底层是解析对了的,只是传递给我的时候错了,那结果也应该只是几个long被截取了,不至于long之后的所有参数都不对。

转载于:https://www.cnblogs.com/nottvlike/p/9047672.html

C#与OC交互方法中的ong参数的兼容性问题相关推荐

  1. 在JAVA语言程序中main_在Java程序main方法中,正确的参数是

    [单选题]下列叙述中,错误的是 [填空题]Access属于()数据库,Access中,不允许在主关键字字段中有重复值或(). [单选题]如下哪些字符串是Java中的标识符? [填空题]常用的基本电量传 ...

  2. 当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的.

    当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递 答:是值传递.Java 编程语言只有值传递参数.当一个对象实例作为一个参数被传 ...

  3. Mybatis的Mapper方法中传递map参数的写法

    Mybatis的Mapper方法中传递map参数的写法 当我们在进行数据分页查询时,如果想让Mybatis的分页查询返回Map对象的集合,我们需要在查询的方法上使用单个参数或者使用Map对象作为参数进 ...

  4. python基础——matplotlib——scatter和plot方法中的maker参数(点的样式)

    一.scatter scatter方法主要用来做散点图展示,而plot方法主要用来做折线图展示,也可以用于散点图的展示.两个方法的参数基本是通用的.以scatter方法为例,常用参数包括: plt.s ...

  5. C# 方法中的this参数

    用C#的this关键字,对Unity中的Transform类进行扩展的一个实例: public static class GameHelper {public static void FindChil ...

  6. python默认参数的传参方式_如何跳过在Python方法中提供默认参数

    我从Python boto2 library中调用这个方法: boto.emr.step.StreamingStep(name, mapper, reducer=None, combiner=None ...

  7. pandas中DataFrame对象to_csv()方法中的encoding参数

    当使用pd.read_csv()方法读取csv格式文件的时候,常常会因为csv文件中带有中文字符而产生字符编码错误,造成读取文件错误,在这个时候,我们可以尝试将pd.read_csv()函数的enco ...

  8. 如何用 foreach 遍历方法中的所有参数?

    咨询区 Farhad 请问是否有办法可以遍历某个方法的 参数列表 中是否有 null 的情况,比如下面这样的伪代码: public void test (string arg1, string arg ...

  9. 32.C#--方法中使用out参数做登录判断

    static void Main(string[] args) { //分别提示用户输入用户名和密码 //写一个方法来判断用户输入的是否正确 //返回给用户一个登陆结果,并且还要单独的返回给用户一个登 ...

  10. android drawtext 方法,关于Android Canvas.drawText方法中的坐标参数的正确解释

    canvas.drawText("www.jcodecraeer.com", x, y, paint);  x和y参数是指定字符串中心的坐标吗?还是左上角的坐标?这个问题的直观印象 ...

最新文章

  1. SpringSecurity使用 配置文件 和wen.xml 文件配置
  2. 微信小程序插件新增能力
  3. [CSA35G][XSY3318]Counting Quests (DP)
  4. zip和unzip上的Java要点
  5. [文档]. Xilinx - 编写有效的Testbenches
  6. MySQL innodb_page_size
  7. nodejs初步搭建HelloWord
  8. 2021-09-1427. 移除元素
  9. #define和inline 的区别
  10. #python 颜色聚类处理
  11. Gen系列服务器,Hpe Microserver Gen10 Plus开箱
  12. h5调用手机相机和录音机_html5 调用手机摄像头以及录音的方法
  13. enfuzion与lsf构建渲染集群_集群渲染系统构建及优化
  14. 简述用决策表设计测试用例的步骤_软件测试(14)--黑盒测试案例设计技术--基于决策表的测试...
  15. linux nand flash模拟u盘,STM32 USB NAND FLASH 模拟U盘
  16. redo synch writes在什么情况下发生
  17. PS176.PD转HDMI芯片简介以及封装
  18. 使用Python中的Button组件制作按钮
  19. 对接京东获取任务工单接口jingdong.homefw.task.search,附接口字段详细说明,数据库设计,Java实现
  20. 解决端口被占用问题(以80端口为例)

热门文章

  1. “中国十大名校”之争!
  2. 表哥首发送书100本,感谢老铁们支持!
  3. IOI2008Island 基环树直径。
  4. 在 windows 上安装免安装版的mysql
  5. 机器学习分类问题中_训练数据类别不均衡怎么解决
  6. 如何把github上fork的项目修改过后再提交到github上
  7. [C++]C++连接MySQL,封装为class(兼容x86和x64)
  8. 让Xcode日志输出中文
  9. 手把手教你如何加入到github的开源世界!
  10. [saiku] 配置saiku实时展现查询数据