大佬教程收集整理的这篇文章主要介绍了c# – 如何在Unity3D中使用C dll?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我使用Visual studio 2010编写了两个.dll.一个在C中,并与用C编写的SDK进行通信.另一个是该C库的C#包装器,因此它可以在C#上下文中使用.
我的计划是让我在Unity3D中使用我的代码,但显然情况并非如此.似乎Unity3D不允许我将.dll作为资产导入,如果它们不是.NET程序集.@R_637_9447@添加我的C#包装器,但不能添加C dll.
每当我尝试访问C库时,都会导致DllNotFoundException.我试过简单地将C库复制到Assets / Plugins文件夹中,但这会产生相同的结果.
有没有办法正确地做到这一点?这是我项目设置中非常重要的一部分.
您可以通过确保DLL在DLL搜索路径上进行第一次p / invoke调用时解决此问题.例如,通过拨打SetDllDirectory
.
我个人更喜欢的解决方案是让您的托管代码p /调用LoadLibrary调用,传递本机DLL的完整绝对路径.这样,当后续的p / invoke引起对LoadLibrary(YourNativeDllName)的调用是make时,你的本机DLL已经在进程中,因此将被使用.
internal static class NativeMethods { [DllImport("kernel32",SetLastError = true,CharSet = CharSet.UnicodE)] internal static extern IntPtr LoadLibrary( String lpFilename ); }
然后在代码中的某个地方:
private static intPtr lib; .... public static void LoadNativeDll(String FileName) { if (lib != IntPtr.Zero) { return; } lib = NativeMethods.LoadLibrary(FileName); if (lib == IntPtr.Zero) { throw new Win32Exception(); } }
在调用该本机库的任何p / inv之前,只需确保调用LoadNativeDll将完整路径传递给本机库.
以上是大佬教程为你收集整理的c# – 如何在Unity3D中使用C dll?全部内容,希望文章能够帮你解决c# – 如何在Unity3D中使用C dll?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。