• 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);

  • 相关阅读:
    Autofac一个优秀的.NET IoC
    最强的 C# Autofac学习笔记
    linux 中shell统计fasta文件中每条染色体中的碱基数目
    linux中awk实现类sort u命令
    linux中输出匹配行的行号
    linux中如何统计文本字符的总个数
    java中类与方法
    linux 中同时统计文件的行数和列数
    类是对象的抽象定义,对象是类的具体实例。
    linux 中sed命令替换指定为此的字符
  • 原文地址:https://www.cnblogs.com/easyfrog/p/3438526.html
Copyright © 2020-2023  润新知