![]() |
Problem mit C++ Pointern
Hallo !
Ich habe mal wieder ein Problem mit der Portierung von C++ Code nach Delphi.... Denke ich zumind., da das Programm nicht die richtigen Ergebnisse zu liefern scheint. Hier mal die C++ Deklarationen und Funktionen :
Delphi-Quellcode:
Und hier mal meine bisheriger Delphi Code:
DWORD read = 0;
LPBYTE buffer = new BYTE[end-start]; DWORD_PTR ptr; int *value; int *cmp; int k, add, tmp; int pattern; if (!buffer) return; pattern = 0xFE27C0; if(ReadProcessMemory(procHandle, (void*)start, buffer, end - start, &read) == NULL) return; else { if (start+2*sizeof(value) >= end) return; for(add = 0; add < (int)(end - start - 2*sizeof(value)); ++add) { value = (int*)&buffer[add]; cmp = (int*)&buffer[add+4]; if (*value == pattern && *cmp == 0) ......
Delphi-Quellcode:
Eventuell habe ich ja mit den Pointern einen Fehler gemacht.. ?!
var
read : DWORD; buffer : Array of PByte; ptr : Longint; value, cmp : ^Integer; k, add, tmp : Integer; pattern : Integer; begin read := 0; SetLength(buffer,(ends-start)); if (Length(buffer) = 0) then exit; pattern := $FE27C0; if not(ReadProcessMemory(m_ProgHandle, Pointer(start), buffer, ends - start, read)) then exit else begin if (start + (2 *sizeof(value)) >= ends) then exit; for add := 0 to Integer(ends - start - (2*sizeof(value)))-1 do begin value := @buffer[add]; cmp := @buffer[add+4]; if (value^ = pattern) and (cmp^ = 0) then begin ........ Bin für jede Hilfe dankbar! CU GOOFY |
Re: Problem mit C++ Pointern
"Array of Type" ist etwas Delphieigenes. Dahinter steckt eine Längeninformation etc.
|
Re: Problem mit C++ Pointern
Zitat:
CU GOOFY |
Re: Problem mit C++ Pointern
Das deine Übersetzung in der du "Array of" verwendest nicht richtig sein kann. Denn wenn "Array of" etwas Delphieigenes ist kann eine Übersetzung von C nach Delphi nicht "Array of" ergeben.
|
Re: Problem mit C++ Pointern
OK ... und wie "übersetze" ich dann
Delphi-Quellcode:
?????
LPBYTE buffer = new BYTE[end-start];
Laut dem was ich in Google so gefunden habe ist LPBYTE in Delphi ein PByte.... CU GOOFY |
Re: Problem mit C++ Pointern
Hi,
damit das mit dem dynamischen Array funktioniert, muss das etwa so aussehen:
Delphi-Quellcode:
var
buffer: array of Byte; {...} ReadProcessMemory(m_ProgHandle, Pointer(start), @buffer[0], ends - start, @bytesRead) |
Re: Problem mit C++ Pointern
Hi !
Danke für die Lösungsvorschläge (auch wenn diese mir direkt nicht geholfen haben). Ich habe nun die Lösung des Problems hier im Board unter andere ![]()
Delphi-Quellcode:
TDataBuffer = Array[0..0] of Byte;
PDataBuffer = TDataBuffer; fDataBuffer : ^PDataBuffer; CU GOOFY |
Re: Problem mit C++ Pointern
Das ist die andere Möglichkeit, wobei man üblicherweise PDataBuffer als Zeiger auf TDataBuffer deklariert. Dabei muss halt dann der notwendige Speicher mit GetMem reserviert werden.
Es spricht aber nichts dagegen, ein dynamisches Array und SetLength zu verwenden, wenn man darauf achtet, auch wirklich den Zeiger auf den Arrayinhalt zu übergeben, wie oben gezeigt. |
Re: Problem mit C++ Pointern
Zitat:
Warum versteh ich auch nicht aber mit der wie oben geposteten Lösung klappt es :
Delphi-Quellcode:
GOOFY
TDataBuffer = Array[0..0] of Byte;
PDataBuffer = ^TDataBuffer; var buffer : pDataBuffer; begin GetMem(buffer,ends-start); .................. |
Re: Problem mit C++ Pointern
i am also having problems with C/C++ pointers
how would this look in delphi? ULONG_PTR=^DWORD; nPort:ULONG;
Delphi-Quellcode:
((PUCHAR)(ULONG_PTR)nPort);
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:20 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz