我写了一个统一的代码来读取测量板上的一些数据。不幸的是,编译器出现以下错误:
Assets/Scribts/Initialize.cs(74,35): error CS0246: The type or namespace name `IDevice' could not be found. Are you missing an assembly reference?
经过一番研究后,我发现统一不能与.NET语言中的.dll一起使用。因此,您必须将其放入本机插件中。
您知道该做什么或是否有一些示例项目?
感谢您的帮助。
答案 0 :(得分:0)
您可以在此处阅读完整的教程:http://www.alanzucconi.com/2015/10/11/how-to-write-native-plugins-for-unity/
摘要是:
1)将原生插件放入Assets/Plugins
文件夹。
2)在类中定义api,如:
[DllImport("TestDLL", EntryPoint = "TestSort")]
public static extern void TestSort(int [] a, int length);
这里有一个sqlite示例:https://github.com/codecoding/SQLite4Unity3d
您将看到C#代码与上述内容相符:
[DllImport("sqlite3", EntryPoint = "sqlite3_open", CallingConvention=CallingConvention.Cdecl)]
public static extern Result Open ([MarshalAs(UnmanagedType.LPStr)] string filename, out IntPtr db);
[DllImport("sqlite3", EntryPoint = "sqlite3_open_v2", CallingConvention=CallingConvention.Cdecl)]
public static extern Result Open ([MarshalAs(UnmanagedType.LPStr)] string filename, out IntPtr db, int flags, IntPtr zvfs);
[DllImport("sqlite3", EntryPoint = "sqlite3_open_v2", CallingConvention = CallingConvention.Cdecl)]
public static extern Result Open(byte[] filename, out IntPtr db, int flags, IntPtr zvfs);
[DllImport("sqlite3", EntryPoint = "sqlite3_open16", CallingConvention = CallingConvention.Cdecl)]
public static extern Result Open16([MarshalAs(UnmanagedType.LPWStr)] string filename, out IntPtr db);
[DllImport("sqlite3", EntryPoint = "sqlite3_enable_load_extension", CallingConvention=CallingConvention.Cdecl)]
public static extern Result EnableLoadExtension (IntPtr db, int onoff);
...但也注意到有多少#ifdef
个条件。
构建跨平台本机绑定非常困难。
另请注意,此仅适用于C / C ++库;如果你有一个现有的C#.Net库(例如NHibernate),答案是否定的,你只是扁平化不能使用那个DLL;你必须获得C#源并专门为了统一重新编译它。