首页 文章

如何在Unity中使用iOS框架?

提问于
浏览
2

我正在尝试在Unity中使用iOS本机框架,但我不知道如何 .

在我的C#脚本中,我调用这样的本机函数:

[DllImport ("__Internal")]
    private static extern void writeHello();

    void Start () {
        writeHello();
    }

我已经在我的项目中拖动iOS框架,如下所示:

Link to my image

但是当我在iPad上部署我的应用程序时,xCode显示此错误:

架构armv7的未定义符号:“_ writeHello”,引用自:RegisterMonoModules中的RegisterMonoModules()ld:未找到架构armv7 clang的符号:错误:链接器命令失败,退出代码为1(使用-v查看调用)

我不明白为什么,我不知道我想做什么是可能的 . 救命! :)

谢谢,Sennin

4 回答

  • 0

    iOS框架必须放在xCode生成的项目中,而不是统一 .

    并且框架的函数必须包含在 extern "C" 块中(如图所示here) .

    然后你就可以在C#中使用 dllimport .

  • 2

    该文档说,位于Assets / Plugins / iOS文件夹中的扩展名为.a,.m, . mm,.c,.cpp的所有文件将自动合并到生成的Xcode项目中 . 文档还说目前不支持子文件夹,因此,在您的示例中,将忽略“framework-helloUnity.framework”文件夹 .

    重要的是要注意.m文件默认为C风格绑定,而.mm文件默认为C风格绑定 . 换句话说,除非您使用 extern "C" 关键字,正如Heilo建议的那样,如果将它们放在.mm或.cpp文件中,则无法找到您的函数 .

    换句话说,如果你把以下内容:

    void writeHello() {}
    

    在名为 Assets/Plugins/iOS/myTestFile.m 的文件中,您的代码应该编译 .

  • 1

    通过这篇文章找到了解决方案:Calling Objective-C method from C++ method?

    通过这样做:

    void myWriteHello( void *test) {
        [(id)test writeHello];
    }
    
    - (void) writeHello
    {
        NSLog(@"Hello World!");
    }
    

    并从Unity调用我的C函数

  • 0

    您已在Xcode项目中编写以下函数,任何类extern“C”{ - (void)writeHello {

    }}

相关问题