Unity C# 调用 C++ DLL 并在 DLL 中调用 C# 的回调函数
Unity C# 调用 C++ DLL 并在 DLL 中调用 C# 的回调函数~~~ 呵呵... 看着有点晕..
再解释一下就是 在Unity中 使用 C# 调用 C++ 写的 DLL, 但是在这个 C++ 的 DLL 的某一个方法中,用到的 回调函数. 也就是需要 在 C# 中传入一个与 C++中签名相同的 方法的问题.
一般在 C++ 中 使用 这种文件 创建一个函数的指针 :
// 开辟内存空间的函数指针 (float *& 为float型指针的引用)
typedef void (*AllocSpace)(int,int,int,float*&,float*&,int*&);
// 调用C#中的函数,根据得到的数据,创建模型
typedef void (*BuildMesh)(void);
在 C# 中 需要定义相当签名的 delegate :
[UnmanagedFunctionPointer(System.Runtime.InteropServices.CallingConvention.Cdecl)]
delegate void AllocSpace(int vc, int nc, int fc, ref System.IntPtr vp, ref System.IntPtr np, ref System.IntPtr fp);
[UnmanagedFunctionPointer(System.Runtime.InteropServices.CallingConvention.Cdecl)]
delegate void BuildMesh();
** 注意: 这里的红色部分的属性,是指定了这个方法的调用规则, 这个必须有. 不然调用规则不一至. 程序直接 Crash掉! **
这里是调用 DLL 中的那个用到 回调函数的 方法:
[DllImport("FBX_Importer")]
extern static void LoadFBX(System.IntPtr fi, System.IntPtr filename, AllocSpace allocSpace, BuildMesh buildMesh);
这里是 使用这个 方法:
LoadFBX(FBXImporter, Marshal.StringToHGlobalAnsi(fileName), MyAllocSpace, MyBuildMesh);
Unity C# 调用 C++ DLL 并在 DLL 中调用 C# 的回调函数的更多相关文章
- gitlab webhook php exec 调用 shell 脚本。shell 脚本中调用 git pull 命令无法执行。
情况如下: 我在ubuntu server 14.04 上面安装了gitlab,来托管项目代码.然后想通过gitlab的web hook 功能来做测试服务器代码自动化更新代码功能.现在遇到一个问题:就 ...
- (转)C#调用非托管Win 32 DLL
转载学习收藏,原文地址http://www.cnblogs.com/mywebname/articles/2291876.html 背景 在项目过程中,有时候你需要调用非C#编写的DLL文件,尤其在使 ...
- python 调用dll 动态链接库 结构体参数及回调函数等示例
结构体示例: 这里是 C 代码的部分,主要是结构体的声明和回调函数定义. // 新版本定义 typedef enum { DevCard, DevLocator, DevReader } DevTyp ...
- 【转】Android 学习笔记——利用JNI技术在Android中调用、调试C++代码
原文网址:http://cherishlc.iteye.com/blog/1756762 在Android中调用C++其实就是在Java中调用C++代码,只是在windows下编译生成DLL,在And ...
- QT中QProcess调用命令行的痛苦经历(调用Winrar,设置工作目录,获得输出,注意引号与括号,等等)
QT中QProcess调用命令行的痛苦经历 阅读目录 创建压缩包的方法 在QT中调用命令行 在QT中调用C++创建的dll 在QT程序中需要将某些目录和文件压缩为一个rar的压缩包,于是想到了在Q ...
- [转][android][利用JNI技术在Android中调用、调试C++代码]
在Android中调用C++其实就是在Java中调用C++代码,只是在windows下编译生成DLL,在Android中会生成Linux系统下的.so文件(好吧,其实我基本没用过Linux). 没写过 ...
- 在Java中调用Python
写在前面 在微服务架构大行其道的今天,对于将程序进行嵌套调用的做法其实并不可取,甚至显得有些愚蠢.当然,之所以要面对这个问题,或许是因为一些历史原因,或者仅仅是为了简单.恰好我在项目中就遇到了这个问题 ...
- NET中调用存储过程(Output、Input)
NET中调用存储过程(Output.Input) .NET中调用存储过程(Output.Input) 带输入输出参数的存储过程 带输入输出参数的存储过程 create procedure itemCo ...
- 如何在C++中调用C程序
注意这里的C调用C++或者C++调用C意思是.c文件中调用.cpp文件中代码,或者相反. C++和C是两种完全不同的编译链接处理方式,如果直接在C++里面调用C函数,会找不到函数体,报链接错误. 要解 ...
随机推荐
- IE版本检测
<html><body><script type="text/javascript">var browser=navigator.appName ...
- kafka 安装与配置
下载 地址:https://kafka.apache.org/downloads 这里下载的是kafka_2.11-0.11.0.1.tgz 解压 tar -xzf kafka_2.11-0.11.0 ...
- MySQL索引分类和各自用途
一. MySQL: 索引以B树格式保存 Memory存储引擎可以选择Hash或BTree索引,Hash索引只能用于=或<=>的等式比较. 1.普通索引:create index on Ta ...
- Django Model基础 ORM
ORM 对象关系映射(英语:(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的 ...
- img atl和a title
今天发现一个有趣的现象. <a href="#" title="a"><img src="xxx.jpg" alt=& ...
- RAID磁盘阵列的原理与搭建
学习导图 RAID-0结构关系图 RAID-1结构关系图 RAID-5:条带+分布校验(三块磁盘以上) RAID-10:镜像+条带(四块磁盘以上) RAID-0 添加两块硬盘,分别为磁盘1.磁盘2.最 ...
- web项目除了业务还需要关注的点
1:安全性,不允许访问外网,访问外网通过反向代理的方式. 2:安全性,和外网交互的时候,需要CA证书,基于SSL协议的证书 3:日志,生产上通常会关闭某些日志,所以,允许出现的日志就显得至关重要了. ...
- Apache Doris通过supervisor进行进程管理
下面一段文字是摘自doris官方文档:注:在生产环境中,所有实例都应使用守护进程启动,以保证进程退出后,会被自动拉起,如 Supervisor.如需使用守护进程启动,需要修改各个 start_xx.s ...
- solr中facet及facet.pivot理解
Facet['fæsɪt]很难翻译,只能靠例子来理解了.Solr作者Yonik Seeley也给出更为直接的名字:导航(Guided Navigation).参数化查询(Paramatic Searc ...
- 常用数据库2 mysql
知识内容: 1.MySQL介绍及安装使用 2.MySQL管理 3.MySQL数据类型 4.MySQL常用命令 5.事务 6.索引 参考: http://www.cnblogs.com/alex3714 ...