我正在尝试为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,可以忽略此条件。
创建MonoTouch.ObjCRuntime.Class.ThrowOnInitFailure == false
iv
后,但无法使用(例如AddSubview(iv)
没有显示任何内容)。
我认为GPUImage.a文件有问题,但我不知道如何以任何方式测试它。
Here is 7z包含2个项目:TryingBindings - 绑定本身; TryingGPUImage - 正在使用的绑定;
提前致谢。
答案 0 :(得分:6)
感谢Rolf Bjarne Kvinge
有两个问题:
1)具有LinkWith属性(libGPUImage.linkwith.cs)的文件是 没编译。只需右键单击TryingBindings项目,添加,添加 文件并选择它。
2)本机库不包含i386(模拟器)的代码 手臂(装置)。如果您自己构建本机库,则可以 要么创建一个包含所有代码的通用库 体系结构,或者您可以使用几个本机库 支持一组不同的体系结构,并为每个本机库提供一个LinkWith属性。