10

我正在尝试为GPUImage项目创建绑定,但绑定的类都不起作用。例如,GPUImageView:

在 ObjC 中,它是这样声明的(git 中的标头):

@interface GPUImageView : UIView <GPUImageInput>
//then some fields, properties and methods I'm not interested in

所以,我的 ApiDefinition.cs 看起来像这样:

namespace GPUImage
{
    [BaseType (typeof(NSObject))]
    [Model]
    interface GPUImageInput {
    }

    [BaseType (typeof(UIView))]
    interface GPUImageView : GPUImageInput {
        [Export ("initWithFrame:")]
        IntPtr Constructor(RectangleF frame);
    }
}

链接属性:

[assembly: LinkWith ("libGPUImage.a", LinkTarget.Simulator | LinkTarget.ArmV7 | LinkTarget.ArmV7s, ForceLoad = true, Frameworks = "CoreMedia CoreVideo OpenGLES QuartzCore AVFoundation UIKit Foundation")]

它可以构建并创建 dll。但是当我尝试在我的项目中使用它时:

var iv = new GPUImageView (new RectangleF (0, 0, 100, 100));

抛出异常:

无法创建“GPUImage.GPUImageView”类型的本机实例:尚未加载本机类。可以通过将 Class.ThrowOnInitFailure 设置为 false 来忽略此条件。

堆栈跟踪

之后MonoTouch.ObjCRuntime.Class.ThrowOnInitFailure == false iv被创建,但无法使用(例如AddSubview(iv)什么都不显示)。

我想 GPUImage.a 文件有问题,但我不知道如何以任何方式对其进行测试。

这是 7z,其中包含 2 个项目: TryingBindings -- 绑定本身;TryingGPUImage -- 正在使用的绑定;

提前致谢。

PS这是xamarin论坛上这篇文章的链接。

4

1 回答 1

6

感谢 Rolf Bjarne Kvinge

有两个问题:

1)带有LinkWith属性的文件(libGPUImage.linkwith.cs)没有被编译。只需右键单击 TryingBindings 项目,添加,添加文件并选择它。

2)本机库不包含i386(模拟器)的代码,只有arm(设备)。如果您自己构建本机库,您可以创建一个包含所有架构代码的通用库,或者您可以使用多个本机库,每个库都支持一组不同的架构,并且每个本机库只具有一个 LinkWith 属性.

错误 11497

于 2013-04-02T08:18:19.440 回答