Freebasic "zstring ptr" was in Purebasic?
Freebasic "zstring ptr" was in Purebasic?
Hi,
der Titel sagt eigentlich alles. Ich möchte einen Freebasic-Quellcode nach Purebasic konvertieren und bin jetzt auf einen "zstring ptr" gestossen, der von einer DLL als Parameter erwartet wird. Was muss ich der DLL in Purebasic übergeben, damit ich keinen fehlerhaften Speicherzugriff erzeuge? Und wie muss ich meinen PrototypeC definieren, damit die Deklaration der "zstring ptr"-Deklaration aus Freebasic entspricht?
Gruß
René
der Titel sagt eigentlich alles. Ich möchte einen Freebasic-Quellcode nach Purebasic konvertieren und bin jetzt auf einen "zstring ptr" gestossen, der von einer DLL als Parameter erwartet wird. Was muss ich der DLL in Purebasic übergeben, damit ich keinen fehlerhaften Speicherzugriff erzeuge? Und wie muss ich meinen PrototypeC definieren, damit die Deklaration der "zstring ptr"-Deklaration aus Freebasic entspricht?
Gruß
René
http://de.wikibooks.org/wiki/FreeBasic:_Pointer#ZString
Einfach @String.s in Purebasic und die Sache hat sich.
PureBasic Democode:
PB übergibt automatisch den Pointer.
Gruß, Alex
UByte = CharacterEin ZString ist also mehr oder weniger ein Pointer auf ein UByte-Array.
Also einfach ein Null-Terminierter String.Dim a(0 to 9) as ubyte
Wobei a(9) immer 0 ist, weil ja ein ZString immer mit einem Chr(0) endet.
Einfach @String.s in Purebasic und die Sache hat sich.
PureBasic Democode:
Code: Alles auswählen
PrototypeC Caller(String.s)
Gruß, Alex
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster
PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Den Wikieintrag hatte ich mir durchgelesen, trotzdem bekomme ich es nicht hin... Nochmal konkreter: Ich versuche, für Ninfa3D ein Include für Purebasic zu erzeugen und scheitere mit einem "[ERROR] Invalid memory access. (read error at address 0)".
Das Freebasic-Include sieht an der Stelle wie folgt aus:
Mein Purebasic-Include sieht dazu sieht wie folgt aus:
Mein Purebasic-Test-Programm ruft folgendes auf:
Wenn ich den Textur-Namen mit @"media/mur_Ambiant.jpg" übergebe kommt lediglich die Fehlermeldung, die Funktion würde einen String erwarten.
Das die dll mit OpenLibrary(1,"ninfa3d.dll" korrekt geöffnet wird prüfe ich natürlich vorher.
Das Freebasic-Include sieht an der Stelle wie folgt aus:
Code: Alles auswählen
Type nTEXTURE As Uinteger Ptr
Declare Function LoadTexture Cdecl Alias "LoadTexture" (Byval filename As Zstring Ptr) As nTEXTURE
Code: Alles auswählen
PrototypeC.l ProtonLoadTexture(filename.s)
Global nLoadTexture.ProtonLoadTexture = GetFunction(1,"LoadTexture")
Code: Alles auswählen
texture01.l = nLoadTexture("media/mur_Ambiant.jpg")
Das die dll mit OpenLibrary(1,"ninfa3d.dll" korrekt geöffnet wird prüfe ich natürlich vorher.
Hm. Komisch ich hab jetzt noch ein bisschen mehr nachgelesen:
Zstring Ptr müsste ein Pointer auf einen Zstring sein, und das PB - Äqivalent ist eben String, korrekt wäre eben @String.s. Kann es sein das die Funktion einen Unicode-String erwartet, sonst gehen mir die Ideen aus?
Gruß, Alex
> Byval filename As Zstring Ptrhttp://www.freebasic-portal.de/index.php?s=reftopic&id=60 hat geschrieben:[...] wurde er als null-terminierter STRING festgelegt, d.h. er endet bei dem Zeichen CHR(0)
Zstring Ptr müsste ein Pointer auf einen Zstring sein, und das PB - Äqivalent ist eben String, korrekt wäre eben @String.s. Kann es sein das die Funktion einen Unicode-String erwartet, sonst gehen mir die Ideen aus?
Gruß, Alex
Zuletzt geändert von cxAlex am 13.07.2009 10:52, insgesamt 1-mal geändert.
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster
PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
da ein Pointer erwartet wird, probier mal
Code: Alles auswählen
PrototypeC.l ProtonLoadTexture(*filename.i)
Global nLoadTexture.ProtonLoadTexture = GetFunction(1,"LoadTexture")
texture01.l = nLoadTexture(@"media/mur_Ambiant.jpg")
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Code: Alles auswählen
PrototypeC.l ProtonLoadTexture(*filename.i)

PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
Code: Alles auswählen
PrototypeC.l ProtonLoadTexture(*filename.s)
Code: Alles auswählen
texture01.l = nLoadTexture(@"media/mur_Ambiant.jpg")
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Richtig!Kaeru Gaman hat geschrieben:*achselzuck* ich arbeite nicht täglich mit pointern. soll da garkein typ dran?
Ein Pointer hat keinen nativen Typen! Man kann lediglich eine Strukture
angeben um einen strukturierten Pointer zu erhalten.
.i, .l, .s, .w usw. sind keine Strukturen.
@real
Code: Alles auswählen
PrototypeC.l ProtonLoadTexture(*filename.s)
Wird hoffentlich bald vom Compiler angemeckert, kann das nicht mehr sehen

PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22