zoukankan      html  css  js  c++  java
  • 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);

  • 相关阅读:
    为什么选择 Yeoman 及 Yeoman 的安装
    NPOI高效匯出Excel
    CentOS7 MongoDB安裝
    打印函数调用堆栈
    libevent源码分析:eventop
    libevent源码分析:time-test例子
    libevent源码分析:event_assign、event_new
    libevent源码分析:bufferevent
    lievent源码分析:evbuffer
    epoll实现压测工具
  • 原文地址:https://www.cnblogs.com/easyfrog/p/3438526.html
Copyright © 2011-2022 走看看