2

機能しているバインディング プロジェクトから始めましたが、ステータス フラグにグローバルな int を追加する必要があり、エラーなしでバインドできません。サンプル コードから始めましたが、これを機能させることができません。

バインディング ファイルに追加するコードは次のとおりです。

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

次の 3 つのエラーが表示されます。

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

値の割り当てと取得の両方を可能にするもう 1 つのオプションは、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 に答える