1

我有NeoSpeech庫(文本到語音)IOS有.a,.h &數據庫文件。這個庫在ios中工作正常。現在我必須在Xamarin項目中使用這個庫。我想要使​​用靜態庫,但它不可能在其他庫中調用庫,所以我不能在靜態庫中使用neospeech庫。 Xamarin中還有另一種選擇,即Native C與Xamarin連接,但沒有適當的文檔。在我的scanrio中使用鏈接本地庫也很好。請幫幫我。在Xamarin中調用IOS庫

感謝

回答

0

嘗試使用Objective Sharpie需要頭文件(不是某文件),併產生C#API定義文件:ApiDefinition.cs和StructAndEnums.cs。有時候取決於你生成的文件只有StructAndEnums。這可能是好的,但如果它不sharpie應該報告一些錯誤,你可以搜索SO。

然後你可以在那裏創建Binding項目引用.a文件並生成ApiDefinitions。如果您針對不同的處理器架構分開安裝.a,則可以使用lipo在Mac OS bash中創建FAT庫,並僅引用fat lib。爲了您的庫這將是:

lipo -create libvt_eng_james_univ.a, libvt_eng_james_armv77s64.a libvt_eng_beth_simulation.a -output lib_eng_james_fat.a 

可能libvt_eng_james_univ.a已經是脂肪,您可以通過

lipo -info libvt_eng_james_univ.a 

檢查,它會告訴你的脂肪lib中所有硬件架構:i386的x86_64的模擬器armv7,armv7s arm64的設備。

之後,將這個綁定項目從您的主Xamarin項目作爲簡單的庫項目引用。然後,您可以像使用其他庫一樣使用所有類。

+0

感謝您的回覆。實際上有三個庫文件(libvt_eng_james_univ.a,libvt_eng_james_armv77s64.a和libvt_eng_beth_simulation.a)。我曾嘗試Objective Sharpie for univ.a文件。它只創建StructsAndEnums.cs文件,並且沒有Apidefinition文件。 StructsAndEnums中的代碼是: static class CFunctions \t { // extern void VT_UNLOADTTS_ENG_James(int nSpeakerID); \t [的DllImport( 「__Internal」)] \t \t [驗證(PlatformInvoke)] \t 靜態外部空隙VT_UNLOADTTS_ENG_James(INT nSpeakerID); } 請讓我知道如何在Xamarin項目中調用此方法。 – Tarlok

+0

我還需要通過將所有三個庫文件(libvt_eng_james_univ.a,libvt_eng_james_armv77s64.a和libvt_eng_beth_simulation.a)組合起來來創建胖庫,或者它與libvt_eng_james_univ.a一起工作。 – Tarlok

+0

@Tarlok你應該使用sarpie的頭文件,而不是庫。它將分析公共類和方法的定義併爲它們生成c#定義。 更新了我的答案。 – ad1Dima