我正在尝试在Unity3D pro中使用一些C代码。
我的基本方法是(1)将C源代码构建到静态库中(2)创建一个空包并链接到库(3)将包导入Unity 3D pro(作为插件)。
我基本上跟随this tutorial。
直到最近,当我更新我的C代码并重新编译和重建库和捆绑包时,它一直在为我工作一段时间......一切都出错了......
当我第一次导入捆绑包时,我得到了 DllNotFoundException 。
在那个阶段,我的捆绑项目只是一堆库 - 从我的源代码(一个.a文件)构建的库和我认为.a库所依赖的一些其他库(其他库有.dylib扩展名。)
我在捆绑包中添加了一个test.c文件。测试.c文件只包含两行:
#include <stdio.h>
#include "ccn.h"
char* say()
{
return "hi";
}
其中ccn.h是来自我的C源代码的头文件。
重新构建捆绑包后, DllNotFoundExeption 消失了,但我收到了 EntryPointNotFoundException 。
很多和很多谢谢!
此外,我在Apple的文档中看到了一些我不太了解的内容:
如果您的可加载包是一个插件,那么主机应用程序开发人员 通常为一个插件架构提供一个接口 框架。该框架通常包含一个所有插件的类 主要类继承自或者协议(正式或非正式) 插件的主要类采用。
我很确定我创建的可加载包是一个插件。我正在将捆绑包导入Unity3D。这是否意味着我应该从Unity定义一个主要类?怎么样?
答案 0 :(得分:2)
问题有一个简单的解决方案:
首先尝试在test.c文件中为您提供EntryPointNotFoundException的任何函数。
通过“试用”我的意思是,在main()中调用函数并在C中首先测试它。
在我的例子中,抛出EntryPointNotFoundException的函数称为ccn_run()。所以我做了以下事情:
我试了一下,功能在C中运行正常,现在神奇的是当我重建捆绑包(没有删除main()函数和内部的ccn_run()调用时),Unity可以调用ccn_run ()函数没有问题!
我无法解释为什么这会解决我的问题,但这已经为我工作了近一个月了。不久前Xcode升级到4.3.2并且我再次尝试了相同的方法,仍然有效。我想也许添加一个main()函数有助于定义入口点?
最后,我记录了将C代码导入Unity的整个过程,我很高兴在此分享:https://docs.google.com/document/d/1vAeupNQlBTY3y3Bma5Jo_Hs4JRYm6FoEc4vQN0WBGNg/edit
我的代码示例:
希望这个答案特别是我的教程有帮助!