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
DLL-Struktur Rückgabe mit Pointer auf String, auflösen ?
Moderator: Moderatoren
- AUGE_OHR
- 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 ?
hi,
meinst du so was:damit hätte man nun "read" Zugriff auf die MEMBER von My_Structur.
meinst du so was:
Code: Alles auswählen
INLINE METHOD blabla(nPointer)
LOCAL st
st := My_Structur():New()
st:_write_(nPointer,0,-1)
gruss by OHR
Jimmy
Jimmy
- brandelh
- 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 ?
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.
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
Hubert
- brandelh
- 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 ?
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
Hubert