[Assimp] C# Bindings: TypeInitializationException

Hier kann über allgemeine Themen diskutiert werden, die sonst in kein Forum passen.
Insbesondere über Szene, Games, Kultur, Weltgeschehen, Persönliches, Recht, Hard- und Software.
Antworten
Lukas
Beiträge: 5
Registriert: 12.01.2011, 14:57

[Assimp] C# Bindings: TypeInitializationException

Beitrag von Lukas »

Hi!

Ich möcht Assimp gern für mein C#-Projekt verwenden.

Wenn ich das Demo-Projekt starte, krieg ich eine Exception:

Code: Alles auswählen

TypeInitializationException
----
Der Typeninitialisierer für "AssimpPINVOKE" hat eine Ausnahme verursacht.

InnerException:
"Der Typeninitialisierer für \"SWIGExceptionHelper\" hat eine Ausnahme verursacht."

Und wiederum die InnerException davon:
"Der Einstiegspunkt \"SWIGRegisterExceptionCallbacks_Assimp\" wurde nicht in der DLL \"Assimp\" gefunden."
Assimp.Interop wird referenziert, und Assimp.dll wird gefunden (ansonsten würde die Fehlermeldung ja anders lauten).
Hab einen anderen Thread zu dem Problem gefunden - da wurde das Problem aber durch Update gelöst, ich hab aber bereits die aktuellste Version (trunk).

Kann mir jemand damit helfen? :)

lg Lukas
Benutzeravatar
kimmi
Moderator
Beiträge: 1410
Registriert: 26.02.2009, 09:42
Echter Name: Kim Kulling
Wohnort: Luebeck
Kontaktdaten:

Re: [Assimp] C# Bindings: TypeInitializationException

Beitrag von kimmi »

Hast du mal geschaut, ob das Symbol in der dir vorliegenden Dll definiert ist? So etwas kannst du zum Beispiel mit dem Tool depends.exe ( Such mal bei Google ) oder dumpbin.exe ( VS mit dabei ) nachschauen.

Gruß Kimmi
Matthias Gubisch
Establishment
Beiträge: 498
Registriert: 01.03.2009, 19:09

Re: [Assimp] C# Bindings: TypeInitializationException

Beitrag von Matthias Gubisch »

Hallo

würd dir gern helfen, leider hab ich es noch nicht geschafft die Exception bei mir nachzuvollziehen :(
Bevor man den Kopf schüttelt, sollte man sich vergewissern einen zu haben
Benutzeravatar
kimmi
Moderator
Beiträge: 1410
Registriert: 26.02.2009, 09:42
Echter Name: Kim Kulling
Wohnort: Luebeck
Kontaktdaten:

Re: [Assimp] C# Bindings: TypeInitializationException

Beitrag von kimmi »

Tauscht doch die besagte Dll per Mail aus.

Gruß Kimmi
Lukas
Beiträge: 5
Registriert: 12.01.2011, 14:57

Re: [Assimp] C# Bindings: TypeInitializationException

Beitrag von Lukas »

Hast du mal geschaut, ob das Symbol in der dir vorliegenden Dll definiert ist? So etwas kannst du zum Beispiel mit dem Tool depends.exe ( Such mal bei Google ) oder dumpbin.exe ( VS mit dabei ) nachschauen.
Hab nachgeschaut, die Funktion ist in Assimp.dll nicht vorhanden.
Meine Assimp.dll hat die Version 1.1.854.0 und das Änderungsdatum 21.11.2010 22:31.

Bei der Installation hab ich nichts besonders gemacht - SWIG ist ja nicht nötig wenn man nichts verändert, und ich kompiliere ohne boost.
Zuletzt geändert von Lukas am 15.01.2011, 16:39, insgesamt 1-mal geändert.
Matthias Gubisch
Establishment
Beiträge: 498
Registriert: 01.03.2009, 19:09

Re: [Assimp] C# Bindings: TypeInitializationException

Beitrag von Matthias Gubisch »

Hallo

wenn du die Version aus dem Trunk hast und SWIG nicht installiert kann das durchaus das Problem sein.
Die Version des Wrappers stimmt im Trunk nämlich nicht immer mit der C++ Version zusammen. Und da ich schon eine Zeit lang nicht mehr dran gearbeitet habe kann das durchaus sein dass das nicht passt.

Also entweder mal das zum Download angebotene Release nehmen, oder SWIG installierung und mal komplet selber kompilieren

Gruß
Matthias
Bevor man den Kopf schüttelt, sollte man sich vergewissern einen zu haben
Lukas
Beiträge: 5
Registriert: 12.01.2011, 14:57

Re: [Assimp] C# Bindings: TypeInitializationException

Beitrag von Lukas »

Mit der Download-Version tritt dasselbe Problem auf.
Ich hab da sicher einen Denkfehler drinnen, denn es werden Methoden aufgerufen die ich nirgends im Source finden kann.
"SWIGRegisterExceptionCallbacks_Assimp" -- wo ist das implementiert? Es ist in keiner Assimp.dll drinnen, und im gesamten Source ist keine Implementierung davon zu finden. Weder im Trunk, noch im Release-Package.
Hat jemand ne Idee, wo diese Funktion definiert ist?

Ich hab genau folgendes gemacht, ist das richtig?
1. Aktuelle assimp-Version von der Webseite geladen & entpackt
2. Assimp.NET.sln geöffnet und Assimp.NET_DEMO als Start-Projekt gewählt
3. Gestartet
Zuletzt geändert von Lukas am 14.01.2011, 16:01, insgesamt 1-mal geändert.
Matthias Gubisch
Establishment
Beiträge: 498
Registriert: 01.03.2009, 19:09

Re: [Assimp] C# Bindings: TypeInitializationException

Beitrag von Matthias Gubisch »

Diese Fuktion sollte dem Namen nach von SWIG generiert werden und sollte in der AssimpNET.dll im oder in der AssimpNET_CS.dll zu finden sein. und nicht in der Assimp.dll

Auswendig weiß ich grad nicht wo Swig des hingepackt hat
Bevor man den Kopf schüttelt, sollte man sich vergewissern einen zu haben
Lukas
Beiträge: 5
Registriert: 12.01.2011, 14:57

Re: [Assimp] C# Bindings: TypeInitializationException

Beitrag von Lukas »

Danke Matthias für die rasche Hilfe :)

Mein Denkfehler war, dass ich übersehen habe, dass man für die .NET-Version eine andere DLL benötigt. Man benötigt den Output von dem Assimp_NET C++ Projekt, und muss die Datei Assimp.dll nennen, und dann natürlich auch die korrekte Datei einbinden.
JEtzt funktioniert der Viewer.

Hier noch mein Senf zu dem C# Viewer:
-> Vielleicht standardmäßíg culling deaktivieren, viele Modelle (z.B. von Google Warehouse) haben einige vertices die in die falsche Richtung zeigen
-> Mesh-Teile, die keine Textur und dafür eine Materialfarbe haben, werden nicht korrekt angezeigt - sie sind manchmal weiß anstatt die richtige Farbe zu haben. Bin mir nicht sicher woran das liegt, vielleicht komm ich ja drauf während ich assimp in meine Engine integriere.
-> Wenn es Meshteile ohne Textur gibt, crasht der Viewer. Denn das aiTextureCoords-Array hat manchmal eine Länge von 0 (getestet mit Collada-Files). Lösung ist trivial:

Code: Alles auswählen

// AssimpView.cs - CreateMesh:
  if (aiTextureCoords != null) {
					if (aiTextureCoords.Count > i) // modified
					{
						var uv = aiTextureCoords[i];
						dxVertices[i].Tu = uv.x;
						dxVertices[i].Tv = uv.y;
					}
                }
Matthias Gubisch
Establishment
Beiträge: 498
Registriert: 01.03.2009, 19:09

Re: [Assimp] C# Bindings: TypeInitializationException

Beitrag von Matthias Gubisch »

Hallo Lukas

Super wenn das geklappt hat.
Das mit dem Umbenennen sollte eigentlich nicht sein da ist wohl was faul. Danke für den Hinweis.

Zum Thema Viewer:
Vielen dank für deine Hinweise. Ich sollte noch dazusagen dass der Viewer wirklich nur Quick and Dirty ist um einen kleinen Einstiegspunkt zu bilden.
Er ist weder schön noch sicher geschrieben.
Ich arbeite Aktuell an einer neuen Version mit SlimDX (bzw. Versuche zu arbeiten wenn meine knappe Freizeit und andere Projekte das zulassen).
Ansonsten habe ich die Punkte mitaufgenommen und werde mal überprüfen ob die bei dem neuen Viewer dann gefixed sind.

Gruß
Matthias
Bevor man den Kopf schüttelt, sollte man sich vergewissern einen zu haben
Lukas
Beiträge: 5
Registriert: 12.01.2011, 14:57

Re: [Assimp] C# Bindings: TypeInitializationException

Beitrag von Lukas »

Super wenn das geklappt hat.
Das mit dem Umbenennen sollte eigentlich nicht sein da ist wohl was faul. Danke für den Hinweis.
Ich bin mir nicht mehr 100% sicher ob ich die Datei umbenennen musste -- hab eine Menge herumprobiert ;)
Antworten