我正在尝试将原生c(非客观c)库绑定到Xamarin.iOS。
我的项目包含.c和.h文件,可以在XCode中正常运行。项目的实际.h和.m不包含任何函数,我只需要使用c定义的例程。
包含所需方法定义的h文件如下所示:
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
int sprec_flac_encode(const char *wavfile, const char *flacfile);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* !__SPREC_FLAC_ENCODER_H__ */
我已将其构建为胖二进制文件,但Xamarin文档中的规范尚不清楚。鉴于我正在绑定本机库,我是否需要在我的解决方案中使用Binding项目。无论如何,我需要一个包装器调用来放入我的DLLImport定义?这个过程记录在哪里?我需要一个针对我特定情况的教程。
P.S。目标Sharpie正在生成一个空的绑定类,如果我“提供”它我的.h文件,可能因为它不是客观的c。
答案 0 :(得分:5)
由于它是C代码,您应该使用PInvoke Interop Assistant之类的东西来生成C#绑定。
public partial class NativeMethods
{
[DllImport("<libnamehere>",
EntryPoint="sprec_flac_encode",
CallingConvention = CallingConvention.Cdecl)]
public static extern int FlacEncode(
[MarshalAs(UnmanagedType.LPStr)] string wavfile,
[MarshalAs(UnmanagedType.LPStr)] string flacfile) ;
}
C库不需要ObjectiveC绑定项目。只需构建本机库,并使用Dll导入将其添加到项目中。