2013-03-29 6 views
9

Sto provando a creare associazioni per il progetto GPUImage, ma nessuna delle classi associate funziona. Per esempio, GPUImageView:"La classe nativa non ha caricato" errore con i miei binding

In objC è dichiarato come questo (header in git):

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

Quindi, le mie ApiDefinition.cs assomiglia a questo:

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

Costruisce bene e crea dll. Ma quando cerco di usarlo nel mio progetto come questo:

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

Eccezione throwed:

Impossibile creare un'istanza nativa del tipo 'GPUImage.GPUImageView': la classe nativa non ha stato caricato È possibile ignorare questa condizione impostando Class.ThrowOnInitFailure su false.

Stacktrace

Dopo MonoTouch.ObjCRuntime.Class.ThrowOnInitFailure == falseiv è stato creato, ma non utilizzabile (ad esempio AddSubview(iv) spettacolo niente).

Suppongo che ci sia qualcosa di sbagliato nel file GPUImage.a, ma non so come testarlo in alcun modo.

Here is 7z con 2 progetti in esso: TryingBindings - binding stessi; TryingGPUImage - binding in use;

Grazie in anticipo.

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

+0

Puoi condividere i file di intestazione per la libreria Objective-C? Non li vedo nel tuo file 7z. – jonathanpeppers

+0

@jonathanpeppers, https: // github.com/BradLarson/GPUImage/blob/master/framework/Source/GPUImageView.h – folex

+0

Il costruttore vuoto funziona per te? Non vedo alcun metodo 'init' qui. – jonathanpeppers

risposta

5

grazie a Rolf Bjarne Kvinge

Ci sono due problemi:

1) il file con l'attributo LinkWith (libGPUImage.linkwith.cs) è non compilato. Basta fare clic con il tasto destro del mouse sul progetto TryingBindings, Aggiungi, Aggiungi file e selezionalo.

2) La libreria nativa non contiene il codice per i386 (simulatore), solo arm (dispositivo). Se stai creando autonomamente la libreria nativa, puoi creare una libreria universale che contenga il codice per tutte le architetture oppure puoi utilizzare diverse librerie native, ciascuna supporta un diverso set di architetture e dispone di un attributo LinkWith per ogni libreria nativa.

Bug 11497

+0

Sto affrontando lo stesso problema. Aggiunti i progetti di esempio qui https://bugzilla.xamarin.com/show_bug.cgi?id=11497 potresti per favore dare un'occhiata e indicarmi la giusta direzione? Grazie – Supreet

Problemi correlati