2

我从一个正常运行的绑定项目开始,但我需要为状态标志添加一个全局 int 并且我无法让它在没有错误的情况下绑定。我从示例代码开始,无法让它工作。

我添加到绑定文件的代码是:

[Static]
interface CameraEffects {
    [Field ("kCameraEffectsZoomFactorKey", "CameraLibrary")]
    NSString ZoomFactorKey { get; }
}

我得到三个错误:

obj/Debug/ios/PDFExpert/CameraEffects.g.cs(34,94): error CS0117: `MonoTouch.Constants' does not contain a definition for `CameraLibraryLibrary'
obj/Debug/ios/PDFExpert/CameraEffects.g.cs(34,76): error CS1502: The best overloaded method match for `MonoTouch.ObjCRuntime.Dlfcn.dlopen(string, int)' has some invalid arguments
obj/Debug/ios/PDFExpert/CameraEffects.g.cs(34,76): error CS1503: Argument `#1' cannot convert `object' expression to type `string'

如果我关闭库,它会尝试将其分配给另一个未知常量。这似乎真的搞砸了,因为它与文档无关。

4

2 回答 2

3

我想这应该像这样绑定

[Static]
interface CameraEffects {
    [Field ("kCameraEffectsZoomFactorKey", "__Internal")]
    NSString ZoomFactorKey { get; }
}

这是由于在最终应用程序中,可执行文件和 libxxx.a 将链接并合并在一起,因此它应该可以工作。

亚历克斯

于 2012-10-25T02:45:35.650 回答
0

允许赋值和检索值的另一个选项是使用 MonoTouch 使用的内部编组。我从 Xamarin 支持人员那里得到了这个,请注意这是用于操作 int,但如果您获得正确的编组代码,应该是可以使用的模式。

public unsafe static partial class RDPDFGlobal
{
  static readonly IntPtr __Internal_libraryHandle = Dlfcn.dlopen (null, 0);

  public static int RDPDFFeatures {
    get {
      return Dlfcn.GetInt32 (__Internal_libraryHandle, "RDPDFKitEnabledFeatures");
    }
    set {
      var indirect = Dlfcn.dlsym (__Internal_libraryHandle, "RDPDFKitEnabledFeatures");
      if (indirect == IntPtr.Zero)
        throw new Exception ("Field 'RDPDFKitEnabledFeatures' not found.");
        Marshal.WriteInt32 (indirect, value);
    }
}
于 2012-12-28T14:51:45.260 回答