“本机类尚未加载”我的绑定错误

时间:2013-03-29 11:11:04

标签: ios binding xamarin.ios gpuimage

我正在尝试为GPUImage项目创建绑定,但没有一个绑定类正在运行。 例如,GPUImageView:

在ObjC中它被声明为这样(header in 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);
    }
}

LinkWithAttributes:

[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,可以忽略此条件。

Stacktrace

创建MonoTouch.ObjCRuntime.Class.ThrowOnInitFailure == false iv后,但无法使用(例如AddSubview(iv)没有显示任何内容)。

我认为GPUImage.a文件有问题,但我不知道如何以任何方式测试它。

Here is 7z包含2个项目:TryingBindings - 绑定本身; TryingGPUImage - 正在使用的绑定;

提前致谢。

P.S。 Here is the link to this post on xamarin forums.

1 个答案:

答案 0 :(得分:6)

感谢Rolf Bjarne Kvinge

  

有两个问题:

     

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

     

2)本机库不包含i386(模拟器)的代码   手臂(装置)。如果您自己构建本机库,则可以   要么创建一个包含所有代码的通用库   体系结构,或者您可以使用几个本机库   支持一组不同的体系结构,并为每个本机库提供一个LinkWith属性。

Bug 11497