DLL-Struktur Rückgabe mit Pointer auf String, auflösen ?

Fragen rund um diverse Windows-Versionen, ihr Verhalten unter Xbase++ und den Umgang mit der API

Moderator: Moderatoren

Antworten
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

DLL-Struktur Rückgabe mit Pointer auf String, auflösen ?

Beitrag von brandelh »

Hi,

irgendwie stehe ich gerade auf dem Schlauch.
Wenn ich einer DLL einen String per Referenz übergeben will mache ich das einfach per @StringParameter.
Soweit so gut. Nun bekomme ich z.B. eine Struktur zurück, die Daten enthält, diese kann ich mit den BIN Funktionen umwandeln.

nWert := bin2L(substr(cReturn, 5,4)) // 2. LONG Wert in Struktur ...

Nun habe ich aber statt einem LONG einen Pointer auf einen String oder eine andere Struktur ...

Ich denke ich nehme dann bin2U() für DWORD, aber wie bekomme ich aus dem Pointer den String ?
unter Xbase würde ich einfach auf die Variable zugreifen und gut is, aber ich habe ja noch keine Variable sondern nur eine Adress in einem Datenfeld ...

pString := bin2U(substr(cReturn, 5,4)) // 2. Wert in Struktur ist ein String Pointer ...

Hat jemand eine Idee ?

Wobei aktuell bekomme ich noch eine leere Struktur zurück, was ist das schon wieder :banghead:
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: DLL-Struktur Rückgabe mit Pointer auf String, auflösen ?

Beitrag von AUGE_OHR »

hi,

meinst du so was:

Code: Alles auswählen

INLINE METHOD blabla(nPointer)
LOCAL st

   st := My_Structur():New()
   st:_write_(nPointer,0,-1)
damit hätte man nun "read" Zugriff auf die MEMBER von My_Structur.
gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: DLL-Struktur Rückgabe mit Pointer auf String, auflösen ?

Beitrag von brandelh »

ich habe es mit pur Xbase++ gemacht, weil bei dem einen aufruf und Pablos Syntax der Zugriff nicht funktioniert.
Ich habe einfach einen 32 Byte Speicherbereich übergeben und mit
nStringPointer := bin2L(substr(cBuffer,5,4)) (LONG)
bzw.
nStringPointer := bin2U(substr(cBuffer,5,4)) (DWORD)
in eine Variable eingelesen. Aber wie komme ich nun an den String der unter der Variable liegt (MIT Xbase++ PUR) ?

Mit Pablos Syntax und seinen Strukturen stehe ich auch auf dem Kriegsfuß, nach der HBPrintPDF Klasse dachte ich ich hätte es geschnallt,
aber irgendwie bringen mich die API Strukturen / Aufrufe der WinSock2 zur Verzweiflung.
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: DLL-Struktur Rückgabe mit Pointer auf String, auflösen ?

Beitrag von brandelh »

Ich habe doch tatsächlich eine Info dazu von Pablo gefunden, schon etwas älter aber gilt immer noch ;-)
/*
Read String from Pointer to ASCIIZ String (Pablo)

Assuming the string is \0 terminated
PeekStr(pString,0,-1)
or also
cPrintf( "%s", pString )

Of course if the string is not \0 terminated you will got a nice internal
exception

Also in pure Xbase++ without using OT4XB or BAP

function cPsz2Str( pStr)
local cStr := Space(DllCall("kernel32",32,"lstrlen",pStr))
DllCall( "kernel32", 32,"lstrcpy",@cStr,pStr)
return cStr

*/
Gruß
Hubert
Antworten