Unity调用c++动态链接库注意事项
来源:互联网 发布:crossover破解版mac 编辑:程序博客网 时间:2024/06/05 06:49
Unity通过ndk调用java,java通过jni调用c++ .so
1:Jni的.so是独立的,还是依赖其他.so库或静态库?
答:都可以,但具体的.so拷贝到unity中后,是否还能正常调用,有待测试。
2:C++中jni与java回调函数,这里只举例静态函数调用
先保存回调函数的引用,具体的返回格式请查看jni文档
再调用函数
对应到java中的函数如下:
3:C++中jni与java是否可回调参数?
答:可以,具体方式请查看jni文档
4:java传递参数到c++,c++中需要注意转换:
Unity发布到安卓上,直接调用.so库:
1:.so是独立的,还是依赖其他.so库或静态库?
答:必须是独立的,当然打包时可以依赖于任何库,但最终输出的只能是一个整体库,多依赖的方式暂时未测试成功。
2:c++结构函数的书写方式:
3:c#传递字符串到c++可以这样写:
对应到c++中可以这样写:
4:c++是否可以返回字符串?
答:可以
C++需要这样写:
对应到c#端需要这样写:
5:c++是否可以使用回调函数
答:可以
C#需要这样写:
对应到c++里这样写:
6:c++是否可以使用回调参数
答:可以, c#需要传递指针给c++,要再非安全模式下
Unity发布到windows上,直接调用.dll库
1:.dll是独立的,还是依赖其他.dll库或静态库?
答:都可以,如果是依赖其他动态库,则被依赖的dll也要拷贝到unity下
2:c++结构函数的书写方式:
函数前要接3:c#传递字符串的时候应该这样写:
对应到c++里应该是这样的
4:是否可以返回字符串?
答:可以,需要这样写:
5:c++是否可以使用回调函数?
答:可以
C#对应的回调函数应该这样写:
ReckonContourCallback是一个委托
对应到c++里应该这样写:
6:c++是否可以使用回调参数?
答:可以
C#的回调参数需要这样写:
编辑器需要设置打开安全模式开关,并且函数前增加unsafe标志,采用指针作为回调手段,另外传入的指针参数必须是unsafe下的fixed的,要固定住堆中内存。
对应到c++里应该这样写:
注意事项:
另外需要注意的一些坑是,如果dll本身依赖了其他dll,这时需要把被依赖的dll也拷贝到Unity的Assets/Plugins下,但是Unity4.x可能会不好使,5.x正常,原因未知
在把打包好的.so库拷贝到Assets/Plugins下时需要注意,AndroidStudio可能一次打出多种平台的.so,但我们只能一次拷贝一个到Unity的Assets/Plugins下,否则会报库名重复冲突错误。
经过测试,在5.x下运行正常的.so到了4.x中可能会不正常,原因未知。
.so拷贝到Unity5.x的Assets/Plugins下后,需要设置其目标平台为你手机的cpu架构:
否则可能运行不正常。
Unity正常是不允许非安全模式代码的,否则会出现编译错误,不能运行,此时需要在Assets目录下创建一个文本文件,名称为gmcs内容如下:
并且重启编辑器,方可解决。
另外不推荐c#调用java再由java调用c++的方式,除非必要。不推荐多个动态链接库相互依赖的方式,即使可以运行
如果需要动态链接库(dll,.so)可以读取到sd卡上的文件,则在导出工程时需要配置如下:
C#端如果想传递路径给动态链接库读取sd卡内容,格式是这样的:
- Unity调用c++动态链接库注意事项
- unity调用C++动态链接库dll
- 动态链接库注意事项
- 制作和unity调用动态链接库dll文件
- 制作和unity调用动态链接库dll文件
- 标准C调用C++动态链接库
- Java调用c/c++动态链接库
- C#调用C/C++动态链接库
- Python调用C/C++动态链接库
- Python调用C/C++动态链接库
- C调用GO的动态链接库
- JNA调用C语言动态链接库
- 【c#】C#调用matlab动态链接库
- erlang调用c\c++动态链接库
- Python调用C语言之如何调用动态链接库
- C调用C++动态库以及静态链接库
- ctypes: 使用python调用C编写的动态链接库
- C/C++中动态链接库的创建和调用
- sql server2008R2安装记录
- CSDN停更,请移步https://zh1995.github.io/
- 接口回调
- 平衡二叉树原理
- 子串和
- Unity调用c++动态链接库注意事项
- img在div内水平垂直居中
- layer tips 宽和高自定义
- java函 数
- 桥接模式
- 【Java学习笔记】get(),set()方法
- unrecognized command line option “-std=c++11” 无法识别的命令行选项“-std=c++11” 的解决办法
- Redis主从复制和集群配置系列之一
- Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结