momentan arbeite ich an einer 3D-Abstraktionssoftware, wenn man es so nennen kann, damit soll die Arbeit bzw. die Erstellung von 3D-Spielen vereinfacht werden. ( Sie schließt sowohl Direct3D, als auch DirectSound, DirectShow, DirectInput und eine eigene Physikengine ein. Allaround Packet eben. ) Das Projekt ist ziemlich monstermäsig, aber ich habe ja als Schüler ordentlich Zeit zu viel.
Nun, das ganze ist in FreePascal geschrieben und basiert ebenfalls auf COM-Interfaces, allerdings hält es sich nicht ganz an jene Vorschriften. :3schau Ich versuche es so benutzerfreundlich wie möglich zu halten und da ist COM mit seinen Rückgabeparametern nicht so mein Ding ist, zumal man in FreePascal ja nicht mitten drin, so schön wie in C/++, eine Variable deklarieren kann, muss ich es so machen.
Aber naja nun zu meinem Problem, ich würde gerne ein Record bzw. in das C-Equivalent nennt sich struct (?) zurückgeben.
Funktion wird nun aus der DLL exportiert. Nun will ich eine Portierung der Header in C/++ umsetzen. Ich finde es ehrlich gesagt komisch, dass man in C/++ DLL Funktion so fucking kompliziert importieren muss. In FreePascal tuts das Schlüsselwort extrenal und dann der DLL-Name. In C/++ muss man sich erst ein teures Tool kaufen, bzw. sich mit der Testversion rum schlagen um überhaupt an die .lib-Datei zu kommen. Aber das ist ja auch nicht das Problem.
Die Funktionen gehen auch alle, zumindest Testfunktionen mit einfachen Rückgaben wie Int's bzw. Strings ( PChar, Char* ), allerdings wird bei einem Record von einer Zugriffsverletzung die Rede. Ich weiß nur nicht wieso? Bin ich da an die Grenzen der beiden Sprachen angekommen, sind sie in ihrem System zu unterschiedlich oder ist es einfach nur in simpler Denkfehler? Muss ich es etwa echt über Rückgabeparameter machen?