我已经为ZBar启动并运行了一个有效的 MonoTouch 绑定,但是在公开 Obj-C 库定义的用作 NSDictionary 中的键的常量 NSString 时遇到了麻烦:
在 ZBarReaderController.h 中:
extern NSString* const ZBarReaderControllerResults;
我首先尝试通过此处记录的实际 MonoTouch 绑定:
[Static]
interface ZBarSDK
{
[Field ("ZBarReaderControllerResults")]
NSString BarcodeResultsKey { get; }
}
尝试构建包含此内容的项目会导致 btouch 出现以下错误:
未处理的异常:System.ArgumentOutOfRangeException:参数超出范围。
参数名称: startIndex
at System.String.Substring (Int32 startIndex) [0x00000] in :0
at Generator.Generate (System.Type type) [0x00000] in :0
at Generator.Go () [0x00000] in :0
at BindingTouch .Main (System.String[] args) [0x00000] in :0
[ERROR] FATAL UNHANDLED EXCEPTION: System.ArgumentOutOfRangeException: 参数超出范围。
参数名称:startIndex
at System.String.Substring (Int32 startIndex) [0x00000] in :0
at Generator.Generate (System.Type type) [0x00000] in :0
at Generator.Go () [0x00000] in :0
在 BindingTouch.Main (System.String[] args) [0x00000] in :0
接下来,我尝试按照其他SO 答案中的建议手动调用代码。
public static NSString BarcodeResultsKey
{
get
{
var libHandle = Dlfcn.dlopen("libzbar.a",0);
// I also tried this with "__Internal", rather than "libzbar.a"
return Dlfcn.GetStringConstant(libHandle, "ZBarReaderControllerResults");
}
}
它可以正常构建和执行,但只返回一个空字符串(如Dlfcn.GetStringConstant文档,如果链接失败,它将执行此操作)。
那么,还有其他人从第 3 方 Obj-C 库中访问 const 字符串吗?