String Pointer?
Übersicht

#ReaperNewsposterBetreff: String Pointer? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich versuche zur Zeit WinAPI-Funktionen für die Registry (Sry nochmals BtbN ![]() Funktioniert auch soweit alles, nur verwende ich bislang für die Strings, welche ich z.B. von RegEnumValues() erhalte, keine Strings, sondern Banks. Habe es aber noch nicht hinbekommen, einen Pointer zu einem String zu übergeben, ohne das RegEnumValues() irgendeinen Fehler zurückgibt. BMax bringt mir aber (leider) keinen Fehler. Oder sind Pointer-Strings nicht möglich? MfG #Reaper |
||
AMD Athlon 64 3500+, ATI AX800 Pro/TD, 2048 MB DRR 400 von Infineon, ♥RIP♥ (2005 - Juli 2015 -> sic!)
Blitz3D, BlitzMax, MaxGUI, Monkey X; Win7 |
![]() |
mahe |
![]() Antworten mit Zitat ![]() |
---|---|---|
RegEnumValues() erwartet wahrscheinlich ein Char-Array und die Strings in BMax sind irgendwelche Objekte.
Also nicht kompatibel. |
||
ʇɹǝıdɯnɹɹoʞ ɹnʇɐuƃıs - ǝpoɥʇǝɯ-ɹoɹɹıɯ ɹǝp uı ,ɹoɹɹǝ, |
![]() |
FOODy |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn du die Funktionen von der WinApi in 'nem Extern-Block deklarierst, verwendest du für die Stringparameter den "Typ" $z anstelle von :String bzw $?
z.B.: Code: [AUSKLAPPEN] Extern
Function IchErwarteEinString(string_$z) EndExtern Gruß, FOODy |
||
BlitzMax + MaxGUI, 64-bit Arch Linux: Intel Core² E8500 | 8 GB Ram | GeForce GTX 460 · 1024 MB |
#ReaperNewsposter |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Oh, die Extern-Deklaration hab ich ganz vergessen ![]() Vorher war bei lpValueName ein Byte-Pointer, habe das nun mal so geändert: Code: [AUSKLAPPEN] Function RegEnumValue:Int(hKey:Int, dwIndex:Int, lpValueName$z, lpcchValueName:Byte Ptr, Reserved:Int, lpType:Byte Ptr, lpData:Byte Ptr, lpcchData:Byte Ptr)="RegEnumValueA@32"
Und übergebe nun mal so: Code: [AUSKLAPPEN] RegEnumValue( hKey, dwIndex, ValueBnk, Varptr(ValueSizeBnk), 0, Varptr(lpType), BankBuf(DataBnk), Varptr(DataSizeBnk) )
Geht leider auch nicht. ValueBnk bleibt leer. Habe schon mehrere kombinationen ausprobiert, kenne mich da leider noch nicht so sehr aus. (Pointer) Msdn sagt zu den Variablen folgendes: Zitat: LONG WINAPI RegEnumValue(
__in HKEY hKey, __in DWORD dwIndex, __out LPTSTR lpValueName, __inout LPDWORD lpcchValueName, __reserved LPDWORD lpReserved, __out_opt LPDWORD lpType, __out_opt LPBYTE lpData, __inout_opt LPDWORD lpcbData ); Danke schonmal für eure Hilfe! ![]() |
||
AMD Athlon 64 3500+, ATI AX800 Pro/TD, 2048 MB DRR 400 von Infineon, ♥RIP♥ (2005 - Juli 2015 -> sic!)
Blitz3D, BlitzMax, MaxGUI, Monkey X; Win7 |
ChristianK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Für den String "lpValueName" muss vorher schon Speicher reserviert worden sein. Deshalb würde ich nicht $z, sondern Byte Ptr verwenden und ein einfaches Byte-Array von z.B. 1024 an die Funktion übergeben und danach das Array in einen BlitzMax-String umwandeln.
Code: [AUSKLAPPEN] Local str:String = String.FromCString( bytes )
Der Fehler könnte aber natürlich auch wo anders liegen. Vielleicht kannst du noch ein bisschen mehr vom Code zeigen ... ![]() |
||
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 |
#ReaperNewsposter |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Immer wollen sie gleich alle den Code^^ ![]() Also, meintest du das so: Code: [AUSKLAPPEN] Local ValueBnk :Byte[1024] , .. ValueSizeBnk :Int = 1024 , .. DataBnk :TBank = Null , .. DataSizeBnk :Int = 1024 , .. Error :Int = 0 'ValueBnk = CreateBank(1024) DataBnk = CreateBank(1024) Error = RegEnumValue( hKey, dwIndex, Varptr(ValueBnk), Varptr(ValueSizeBnk), 0, Varptr(lpType), BankBuf(DataBnk), Varptr(DataSizeBnk) ) Print String.fromCString(ValueBnk)'"" Und die externe Funktion: Code: [AUSKLAPPEN] Function RegEnumValue:Int(hKey:Int, dwIndex:Int, lpValueName:Byte Ptr, lpcchValueName:Byte Ptr, Reserved:Int, lpType:Byte Ptr, lpData:Byte Ptr, lpcchData:Byte Ptr)="RegEnumValueA@32"
Funktioniert aber leider auch wieder nicht, RegEnumValue() gibt einen Fehler (von sich aus, nicht BMax-Compiler) zurück. PS: Naja, mehr Code braucht man eigentlich nicht unbedingt ![]() Btw: Ging ja auch vorher mit ValueBnk als Bank und Übergabe mit BankBuf(), wollte nur wenn möglich es nicht so B3D-like machen ![]() |
||
AMD Athlon 64 3500+, ATI AX800 Pro/TD, 2048 MB DRR 400 von Infineon, ♥RIP♥ (2005 - Juli 2015 -> sic!)
Blitz3D, BlitzMax, MaxGUI, Monkey X; Win7 |
ChristianK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ja, so in etwa hab ich's mir gedacht. Nur beim 3. Parameter ohne Varptr, sonst bekommst du einen Zeiger auf einen Zeiger. Arrays werden nämlich schon von sich aus als Ptr behandelt. | ||
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 |
#ReaperNewsposter |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Oh, ubs, ok, wuste ich nicht. ![]() Funktioniert, super, danke! ![]() |
||
AMD Athlon 64 3500+, ATI AX800 Pro/TD, 2048 MB DRR 400 von Infineon, ♥RIP♥ (2005 - Juli 2015 -> sic!)
Blitz3D, BlitzMax, MaxGUI, Monkey X; Win7 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group