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