2012-11-07 46 views
2

我試圖在Unity中使用iOS本機框架,但我不知道如何。如何在Unity中使用iOS框架?

裏面我的C#腳本,我調用本機的功能是這樣的:

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

    void Start() { 
     writeHello(); 
    } 

我已經拖了iOS框架我的項目裏面是這樣的:

Link to my image

但是當我部署我xCode顯示此錯誤:

Undefined symbols for architecture armv7: "_writeHello", referenced from: RegisterMonoModules() in RegisterMonoModules.o ld: symbol(s) not found for architecture armv7 clang: error: linker command failed with exit code 1 (use -v to see invocation)

我不明白爲什麼,我不知道我想要做什麼是可能的。 幫助! :)

感謝, 仙人

+0

你解決問題了嗎? – Rajesh

+0

@Rajesh是的,看到我的答案在下面;) –

回答

2

iOS的框架必須被放置在Xcode的生成的項目,不團結。

並且框架的功能必須封裝在extern "C"塊中(如圖所示here)。

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

+0

嗨,謝謝你的迴應。問題是我的writeHello函數是用Objective-C母語編寫的,所以我的writeHello文件是.m,我可以使用符號「extern」嗎? –

1

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

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

,並要求我的C函數的醫生說,與所有的擴展文件的.a位於Assets/Plugins/iOS文件夾中的.m,.mm,.c,.cpp將自動合併到生成的Xcode項目中。該文檔還說目前不支持子文件夾,因此,在您的示例中,「framework-helloUnity.framework」文件夾將被忽略。

重要的是要注意.m文件默認爲C風格的綁定,而.mm文件默認爲C++風格的綁定。換句話說,除非您使用extern "C"關鍵字,正如Heilo所建議的那樣,如果將它們放入.mm或.cpp文件中,則不會找到您的函數。

換句話說,如果你把以下內容:

void writeHello() {} 
在一個名爲 Assets/Plugins/iOS/myTestFile.m文件

,你的代碼應該編譯。

0

您的Xcode項目的任何類 的extern 「C」 寫下面的函數{ - (無效)writeHello {

}}

相關問題