4

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

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

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

    void Start () {
        writeHello();
    }

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

链接到我的图片

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

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

我不明白为什么,我不知道我想要做的事情是否可行。帮助!:)

谢谢,森宁

4

4 回答 4

3

iOS框架必须放在xCode生成的项目中,不能统一。

并且框架的功能必须包装在一个块中(如此extern "C"所示)。

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

于 2012-11-07T10:10:27.497 回答
1

该文档说,位于 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,您的代码应该可以编译。

于 2012-11-08T22:02:09.750 回答
0

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

通过这样做:

void myWriteHello( void *test) {
    [(id)test writeHello];
}

- (void) writeHello
{
    NSLog(@"Hello World!");
}

并从 Unity 调用我的 C 函数

于 2012-11-07T14:06:29.550 回答
0

您已经在 Xcode 项目中编写了以下函数 any class extern "C" { -(void) writeHello {

} }

于 2014-04-15T06:15:04.437 回答