2013-03-29 10 views
9

Ich versuche, Bindungen für GPUImage Projekt zu erstellen, aber keiner der gebundenen Klassen funktioniert. Zum Beispiel GPUImageView:"Die native Klasse wurde nicht geladen" Fehler mit meinen Bindungen

In ObjC es wie folgt erklärt hat (header in git):

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

So sieht mein ApiDefinition.cs wie folgt aus:

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")] 

Es baut ok und erstellt dll. Aber wenn ich versuche, es zu benutzen in meinem Projekt wie folgt aus:

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

Ausnahme throwed:

kann keine nativen Instanz des Typs erstellen ‚GPUImage.GPUImageView‘: die native Klasse hat nicht wurde geladen. Es ist möglich, diese Bedingung zu ignorieren, indem Sie Class.ThrowOnInitFailure auf false setzen.

Stacktrace

Nach MonoTouch.ObjCRuntime.Class.ThrowOnInitFailure == falseiv erstellt wurde, aber unbrauchbar (z AddSubview(iv) Show nichts).

Ich nehme an, dass etwas mit der Datei GPUImage.a nicht stimmt, aber ich weiß nicht, wie ich es in irgendeiner Weise testen soll.

Here is 7z mit 2 Projekten drin: TryingBindings - Bindungen selbst; TryingGPUImage - verwendete Bindungen;

Vielen Dank im Voraus.

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

+0

Können Sie die Header-Dateien auf dem Ziel-C-Bibliothek teilen? Ich sehe sie nicht in deiner 7z-Datei. – jonathanpeppers

+0

@jonathanpeppers, https: // github.com/BradLarson/GPUImage/Blob/Master/Framework/Quelle/GPUImageView.h – folex

+0

Funktioniert der leere Konstruktor für Sie? Ich sehe hier keine "Init" -Methoden. – jonathanpeppers

Antwort

5

Dank Rolf Bjarne Kvinge

Es gibt zwei Probleme:

1) Die Datei mit dem Attribut LinkWith (libGPUImage.linkwith.cs) ist nicht kompiliert. Klicken Sie einfach mit der rechten Maustaste auf das TryingBindings-Projekt, Hinzufügen, Hinzufügen Dateien und wählen Sie es aus.

2) Die native Bibliothek enthält keinen Code für i386 (Simulator), nur Arm (Gerät). Wenn Sie die native Bibliothek selbst erstellen, können Sie entweder eine universelle Bibliothek erstellen, die Code für alle -Architekturen enthält, oder Sie können mehrere native Bibliotheken verwenden, die jeweils unterschiedliche Architekturen unterstützen und nur über ein LinkWith-Attribut verfügen jede native Bibliothek.

Bug 11497

+0

Ich stehe vor dem gleichen Problem. Die Beispielprojekte hier https://bugzilla.xamarin.com/show_bug.cgi?id=11497 hinzugefügt. Könnten Sie bitte einen Blick darauf werfen und in die richtige Richtung zeigen? Vielen Dank – Supreet

Verwandte Themen