我有NeoSpeech庫(文本到語音)IOS有.a,.h &數據庫文件。這個庫在ios中工作正常。現在我必須在Xamarin項目中使用這個庫。我想要使用靜態庫,但它不可能在其他庫中調用庫,所以我不能在靜態庫中使用neospeech庫。 Xamarin中還有另一種選擇,即Native C與Xamarin連接,但沒有適當的文檔。在我的scanrio中使用鏈接本地庫也很好。請幫幫我。在Xamarin中調用IOS庫
感謝
我有NeoSpeech庫(文本到語音)IOS有.a,.h &數據庫文件。這個庫在ios中工作正常。現在我必須在Xamarin項目中使用這個庫。我想要使用靜態庫,但它不可能在其他庫中調用庫,所以我不能在靜態庫中使用neospeech庫。 Xamarin中還有另一種選擇,即Native C與Xamarin連接,但沒有適當的文檔。在我的scanrio中使用鏈接本地庫也很好。請幫幫我。在Xamarin中調用IOS庫
感謝
嘗試使用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項目作爲簡單的庫項目引用。然後,您可以像使用其他庫一樣使用所有類。
好像你有同樣的問題,檢查我的問題,有一個很好的答案鏈接Objective-C的庫Xamarin。
How to bind an Objective-C static library to Xamarin.iOS?
希望它可以幫助你。
感謝您的回覆。實際上有三個庫文件(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
我還需要通過將所有三個庫文件(libvt_eng_james_univ.a,libvt_eng_james_armv77s64.a和libvt_eng_beth_simulation.a)組合起來來創建胖庫,或者它與libvt_eng_james_univ.a一起工作。 – Tarlok
@Tarlok你應該使用sarpie的頭文件,而不是庫。它將分析公共類和方法的定義併爲它們生成c#定義。 更新了我的答案。 – ad1Dima