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# 的回调函数的更多相关文章

  1. gitlab webhook php exec 调用 shell 脚本。shell 脚本中调用 git pull 命令无法执行。

    情况如下: 我在ubuntu server 14.04 上面安装了gitlab,来托管项目代码.然后想通过gitlab的web hook 功能来做测试服务器代码自动化更新代码功能.现在遇到一个问题:就 ...

  2. (转)C#调用非托管Win 32 DLL

    转载学习收藏,原文地址http://www.cnblogs.com/mywebname/articles/2291876.html 背景 在项目过程中,有时候你需要调用非C#编写的DLL文件,尤其在使 ...

  3. python 调用dll 动态链接库 结构体参数及回调函数等示例

    结构体示例: 这里是 C 代码的部分,主要是结构体的声明和回调函数定义. // 新版本定义 typedef enum { DevCard, DevLocator, DevReader } DevTyp ...

  4. 【转】Android 学习笔记——利用JNI技术在Android中调用、调试C++代码

    原文网址:http://cherishlc.iteye.com/blog/1756762 在Android中调用C++其实就是在Java中调用C++代码,只是在windows下编译生成DLL,在And ...

  5. QT中QProcess调用命令行的痛苦经历(调用Winrar,设置工作目录,获得输出,注意引号与括号,等等)

    QT中QProcess调用命令行的痛苦经历   阅读目录 创建压缩包的方法 在QT中调用命令行 在QT中调用C++创建的dll 在QT程序中需要将某些目录和文件压缩为一个rar的压缩包,于是想到了在Q ...

  6. [转][android][利用JNI技术在Android中调用、调试C++代码]

    在Android中调用C++其实就是在Java中调用C++代码,只是在windows下编译生成DLL,在Android中会生成Linux系统下的.so文件(好吧,其实我基本没用过Linux). 没写过 ...

  7. 在Java中调用Python

    写在前面 在微服务架构大行其道的今天,对于将程序进行嵌套调用的做法其实并不可取,甚至显得有些愚蠢.当然,之所以要面对这个问题,或许是因为一些历史原因,或者仅仅是为了简单.恰好我在项目中就遇到了这个问题 ...

  8. NET中调用存储过程(Output、Input)

    NET中调用存储过程(Output.Input) .NET中调用存储过程(Output.Input) 带输入输出参数的存储过程 带输入输出参数的存储过程 create procedure itemCo ...

  9. 如何在C++中调用C程序

    注意这里的C调用C++或者C++调用C意思是.c文件中调用.cpp文件中代码,或者相反. C++和C是两种完全不同的编译链接处理方式,如果直接在C++里面调用C函数,会找不到函数体,报链接错误. 要解 ...

随机推荐

  1. VS2010安装选项中有个“图标库”

    位置 :\Program Files\Microsoft Visual Studio 10.0\Common7\VS2010ImageLibrary\2052\VS2010ImageLibrary.z ...

  2. Qt中路径问题小结

    转载:奋斗Andy 在做Qt项目的时候,我们难免遇到到文件路径问题. 如QFile file("text.txt")加载不成功.QPixmap("../text.png& ...

  3. appium+python自动化43-微信公众号webview操作

    前言 上一篇已经解决切换到微信公众号的webview上了,但是定位webview上元素的时候一直提示找不到,打印page_source也找不到页面上的元素,这个问题困扰了一整天,还好最后找到了原因, ...

  4. 学习笔记之ASP.NET MVC & MVVM & The Repository Pattern

    ASP.NET MVC | The ASP.NET Site https://www.asp.net/mvc ASP.NET MVC gives you a powerful, patterns-ba ...

  5. python selenium-2 定位元素

    元素 方法 示例 id find_element_by_id('su') driver.get("http://www.baidu.com")driver.find_element ...

  6. 递归神经网络(Recursive Neural Network, RNN)

    信息往往还存在着诸如树结构.图结构等更复杂的结构.这就需要用到递归神经网络 (Recursive Neural Network, RNN),巧合的是递归神经网络的缩写和循环神经网络一样,也是RNN,递 ...

  7. Hadoop(1.2.1)安装

    背景知识: 1.数据分布存储,不是复制存储 2.数据不动,代码动,由于分布式存储,所以把代码移动到数据的地方计算. 3.数据如何分割,hadoop提供的分割文件的编程接口 安装: 1.安装JDK 1. ...

  8. HIbernate编程模型

    1.Hibernate: ORM框架,简化SQL开发,编程接口丰富,简化JDBC编程 2.有点: Lazy机制配合Fetch的HQL高级查询,提高开发效率 难点:理解Lazy与Fetch JOIN的原 ...

  9. 自定义ExtJS插件

    http://cache.baiducontent.com/c?m=9f65cb4a8c8507ed4fece763105392230e54f73b6f93834c28c3933fc239045647 ...

  10. hive的安装,一般不容易察觉的hdfs的配置问题导致hive安装的失败

    在安装hive的过程中,一般需要的准备环境就是hadoop集群的正常启动,要装有mysql,zookeeper. 具体怎么安装配置我在这里不多说,安装教程网上有挺多的. 我这里说下我遇到的问题,首先从 ...