【发布时间】:2014-08-26 10:49:48
【问题描述】:
我有一个纯 c 方法,可以将 wav 转换为 flac。我需要在 Xamarin MonoTouch 项目中使用此功能。 Xamarin 允许绑定到 Cocoa Touch 静态库,其中方法定义是用 Objective-c 编写的,而不是纯 c。
所以在 XCode 中,我组装了一个 Cocoa Touch 静态库项目,其中包含本地功能的 .h 和 .c 文件。我还设置了一切,以 .a 文件的形式构建一个“胖”多平台库。
现在我需要通过 Objective-c 公开的单一方法在 .h 声明中看起来如下:
int sprec_flac_encode(const char *wavfile, const char *flacfile);
我假设我可以在 Objective-c 类中为这个本机函数编写一个包装器函数,然后从我的 .net 绑定中调用那个 obj-c 包装器。
上述声明包装在objective-c 中的外观如何?
其他信息
我知道我可以封装一个原生 c 方法。我使用自动化工具在 C# 中生成包装器。它导致了以下形式的方法声明:
[DllImport ("/Users/maxpavlov/Perforce/max.pavlov_Moment_5440/Mobile/iOSNative/SpeechRecognitionC/GoogleSpeechRecognizerC/GoogleSpeechRecognizerC/flac_encoder.h")]
int Sprec_flac_encode (ref string wavfile, ref string flacfile);
.Net 编译器似乎不理解这种类型的 DllImport 调用,因此我想我可以用 obj-c 包装并将其导出到 .net,然后尝试弄清楚如何修复DLL 导入。
【问题讨论】:
-
我很难相信 Xamarin 允许您绑定 Objective-C 方法而不是 C 方法。他们的docs 的快速谷歌似乎同意这一点。
-
@JustSid,所以你说我可以直接调用纯c方法。如果是这样,是的,我也这么认为。为什么我没有选择我刚刚在问题文本的“附加信息”部分中描述的那条路线。不过感谢您的提示。
-
检查我链接的文档页面,它使用的语法与您不同。我无法测试它,因为我不使用 C#/Xamarin,但它可能值得一试。
标签: objective-c c cocoa-touch xamarin.ios xamarin