Per DLL auf Types zugreifen
Übersicht

![]() |
NoobodyBetreff: Per DLL auf Types zugreifen |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nun, da ich mich in letzter Zeit ein wenig mit DLLs für Blitz beschäftigt habe, bin ich nun vor ein Problem gestossen.
Und zwar geht es um das Übergeben von Objekten an DLLs. Wenn ich nun in der DLL diesen C - Code habe (bei der Funktion habe ich der Übersicht wegen _stdcall etc. weggelassen) Code: [AUSKLAPPEN] struct Test {
int X; }; void TestFunc( Test* T ) { T->X = 5; }; und nun in Blitz folgenden Code: [AUSKLAPPEN] Type TTest
Field X End Type Test.TTest = New TTest TestFunc( Test ) Print Test\X ausführe, macht das keine Probleme. Stehe ich nun aber vor der folgenden Situation, so funktioniert das nicht wirklich. DLL: Code: [AUSKLAPPEN] struct Test1 {
int X; }; struct Test2 { Test1* Member; }; void TestFunc( Test2* T ) { T->Member->X = 5; }; Blitz: Code: [AUSKLAPPEN] Type TTest1
Field X End Type Type TTest2 Field Member.TTest1 End Type Test.TTest2 = New TTest2 Test\Member = New TTest1 TestFunc( Test ) Print Test\Member\X Blitz bringt in der letzten Zeile ein "abnormal program termination". Liegt das nun speziell an meinem Code (ich bin in C leider noch nicht so sattelfest), oder liegt das Problem daran, wie Blitz Objekte übergibt? |
||
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun |
ChristianK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Es liegt daran, wie Blitz die Objekte übergibt. In der decls-Datei schreibst du ja als Datentyp für TestFunc "*". Wenn die Funktion aufgerufen wird, gibt BB nicht das Handle des Types an die Funktion weiter (, sondern einen Zeiger auf den Anfang der eigentlichen Daten. Beispiel:
Blitz-Type (Handle, das von New zurückgegeben wird) - Daten, die von Blitz benötigt werden (Größe, nächster Type, usw.) - Beginn der Daten/Member <- dieser Zeiger wird bei einem Aufruf weitergegeben, ist also nicht zu verwechseln mit dem Handle. Wenn sich in dem Type ein weiterer Type befindet, bekommst du von dem eben nur das Blitz-Handle und nicht die Daten, die für dich interessant sind. |
||
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT |
![]() |
Noobody |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ok, so etwas in der Art hatte ich mir gedacht.
Da werd ich wohl nen Workaround schreiben müssen. Vielen Dank für die Antwort! |
||
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group