Unity如何使用本机DLL或转换为托管

时间:2019-05-28 14:12:34

标签: c# c++ unity3d native

我正在尝试在hololens的统一项目中使用本机c ++ UWP组件。

我已经成功使用了托管dll,但是我无法弄清楚如何使用此本机dll /

我想将dll转换为托管dll或找到某种使用本机dll的方法。

2 个答案:

答案 0 :(得分:0)

您是否尝试过以下操作:Wrap native DLL for C#(第二代码块很有趣)?

无法转换dll。您可以将c ++代码转换为c#,然后创建托管dll,但导入本机dll会更容易。

编辑:应该提到的是,我并不是特别要问这个问题,只是第二个代码块,该dll被导入。

答案 1 :(得分:0)

内存管理在C ++中的工作方式完全不同,因此无法在C#中使用C ++库的直接作用。

C ++使用name mangling来编码方法签名,并且该名称修饰未标准化(这取决于编译器)。 为了解决这个问题,您需要使用静态“ std调用”将它们导出到外部“ C”部分。

这意味着您需要为C#中使用的每个实例方法使用静态方法创建包装器。

Unity Manual开始(请注意,对于ios,导入dll是不同的,如下面的代码所示)

    using UnityEngine;
    using System.Runtime.InteropServices;

    class SomeScript : MonoBehaviour {

       #if UNITY_IPHONE

       // On iOS plugins are statically linked into
       // the executable, so we have to use __Internal as the
       // library name.
       [DllImport ("__Internal")]

       #else

       // Other platforms load plugins dynamically, so pass the name
       // of the plugin's dynamic library.
       [DllImport ("PluginName")]

       #endif

       private static extern float FooPluginFunction ();

       void Awake () {
          // Calls the FooPluginFunction inside the plugin
          // And prints 5 to the console
          print (FooPluginFunction ());
       }
    }

您也可以阅读此Unity Answer,以获取更多信息。