我正在尝试在hololens的统一项目中使用本机c ++ UWP组件。
我已经成功使用了托管dll,但是我无法弄清楚如何使用此本机dll /
我想将dll转换为托管dll或找到某种使用本机dll的方法。
答案 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,以获取更多信息。