【问题标题】:Binding extern NSString in Monotouch在 Monotouch 中绑定外部 NSString
【发布时间】:2012-04-04 07:07:40
【问题描述】:

我目前正在处理 MobClix 绑定,我遇到了这一行:

extern NSString* const MCAdsErrorDomain;

该行出现在任何类或接口之外,我不确定如何在 c# 中绑定它。任何帮助将不胜感激!

【问题讨论】:

    标签: c# iphone binding xamarin.ios


    【解决方案1】:

    你的定义看起来是基于 C 的,所以它应该像 Rolf 的例子告诉你的那样工作。

    但是,如果/当您使用 btouch 工具绑定 Objective-C 库时,您将需要使用类似的东西:

        [Field ("XXMyString")]
        NSString MyString { get; }
    

    这在 MonoTouch 的绑定documentation中有详细描述。

    【讨论】:

    • 这正是我创建此主题之前的内容,它无法编译,因为我不知道该放在哪里。 Objective-c 的行在所有类和接口声明之外。我可以将该字段放入任何类中吗?
    • 一般来说(objective-c 方面)字段是用特定类型记录的(在哪里使用它们),所以我们在 MonoTouch 中绑定它们。但是,由于它们是静态的,因此您可以将它们添加到任何有意义的地方(如果您有多个,则包括一个新类型来保存它们)。
    • 将字段包含在所有类中是否最安全,因为我实际上不知道它将在哪里使用?除了 [Field ()] 之外,我还需要做任何其他事情来声明它是对所有类和接口可见的静态字段吗?
    • [Field] 应该足够了。 OTOH,您可以跳过它,直到您需要使用它。这样你就可以把它放在它所属的地方(如果你需要的话)。 IOW 添加未使用的[Field] 不会为您的绑定增加任何价值。
    【解决方案2】:

    这样做是这样的:

    var handle = Dlfcn.dlopen ("/path/to/mobclix-library", 0);
    NSString MCAdsErrorDomain = Dlfcn.GetStringConstant (handle, "MCAdsErrorDomain");
    Dlfcn.dlclose (handle);
    

    您还可以在此处查看示例(其中也包括一些错误检查):https://github.com/mono/maccore/blob/master/src/CoreVideo/CVPixelFormatDescription.cs#L67

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多