Per DLL auf Types zugreifen

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Noobody

Betreff: Per DLL auf Types zugreifen

BeitragDo, Okt 23, 2008 15:12
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Okt 23, 2008 15:50
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Okt 23, 2008 16:08
Antworten mit Zitat
Benutzer-Profile anzeigen
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

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group