2013-03-29 10 views
9

Próbuję utworzyć wiązania dla projektu GPUImage, ale żadna z klas powiązanych nie działa. Na przykład GPUImageView:Błąd "natywna klasa nie ładuje się" z powiązaniami

W ObjC to zadeklarowana następująco (header in git):

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

Więc, moi ApiDefinition.cs wygląda następująco:

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

To buduje ok i tworzy bibliotekę dll. Ale gdy próbuję go użyć w moim projekcie tak:

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

Wyjątek throwed:

Nie można utworzyć natywną wystąpienie typu „GPUImage.GPUImageView”: natywny klasa nie ma został załadowany. Można zignorować ten warunek, ustawiając Class.ThrowOnInitFailure na wartość false.

Stacktrace

Po MonoTouch.ObjCRuntime.Class.ThrowOnInitFailure == falseiv zostało utworzone, ale mogą być użyte (np AddSubview(iv) pokazują żadnych).

Przypuszczam, że coś jest nie tak z plikiem GPUImage.a, ale nie wiem, jak go przetestować w jakikolwiek sposób.

Here is 7z z 2 projektami: TryingBindings - same wiązania; TryingGPUImage - powiązania w użyciu;

Z góry dziękuję.

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

+0

można udostępnić pliki nagłówkowe do biblioteki objective-c? Nie widzę ich w twoim pliku 7z. – jonathanpeppers

+0

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

+0

Czy pusty konstruktor działa dla ciebie? Nie widzę tu żadnej metody "init". – jonathanpeppers

Odpowiedz

5

Dzięki Rolf Bjarne Kvinge

Istnieją dwa problemy:

1) plik z atrybutem LinkWith (libGPUImage.linkwith.cs) to nie skompilowany. Kliknij prawym przyciskiem myszy projekt TryingBindings, dodaj, dodaj pliki i wybierz go.

2) Biblioteka natywna nie zawiera kodu dla urządzenia i386 (symulator), tylko ramię (urządzenie). Jeśli samodzielnie tworzysz natywną bibliotekę, możesz utworzyć uniwersalną bibliotekę zawierającą kod dla wszystkich architektur lub możesz korzystać z kilku rodzimych bibliotek, z których każda obsługuje , obsługując inny zestaw architektur i po prostu posiada atrybut LinkWith dla każda natywna biblioteka.

Bug 11497

+0

Mam do czynienia z tym samym problemem. Dodano przykładowe projekty tutaj https://bugzilla.xamarin.com/show_bug.cgi?id=11497 Czy mógłbyś spojrzeć i wskazać mi właściwy kierunek? Dzięki – Supreet

Powiązane problemy