Delphi XE, XE2 - błąd

0

Mam funkcję czytającą dane z procesu pamięci aplikacji.

function MemReadString(Address: Integer): String;
var
  NB: LongWord;
  Temp: ARRAY [1..255] OF Byte;
  I: Byte;
  IDProcess, proc_ID: Cardinal;
begin
  GetWindowThreadProcessID(FindWindow('Nazwa programu', nil), @proc_ID);
  IDProcess := OpenProcess(PROCESS_ALL_ACCESS, false, proc_ID);
  Result := '';
  ReadProcessMemory(IDProcess, Ptr(Address), @Temp[1], 255, NB);
  for I := 1 to 255 do
  begin
    if ((Temp[I] = 0) or (Temp[I] = $0F)) then
    Break;
    Result := Result + Chr(Temp[I]);
  end;
end;

Przeniosłem się z Delphi XE na Delphi XE2, praktycznie skopiowałem mój program do środowiska XE2 i w całym kodzie mam tylko jeden błąd, dotyczy on tej linijki:

ReadProcessMemory(IDProcess, Ptr(Address), @Temp[1], 255, NB);

Błąd o treści:
[DCC Error] Unit1.pas(125): E2033 Types of actual and formal var parameters must be identical

Dodam, że w zwykłej XE program kompilował się bez problemu, a w XE2 już nie da rady.

1
  1. Delphi XE, XE2 - błąd - no tak! To bardzo dobrze tłumaczy twój problem!
  2. Nie, nie zadałeś pytania, więc ciężko żebyś uzyskał odpowiedź
  3. Widzę że zamykanie uchwytów masz gdzieś.
  4. Łapanie błędów też masz w dupie
  5. Porównaj sobie headery z deklaracją, pewnie chodzi o ostatni parametr.
  6. Jeżeli pkt. piąty za trudny to zrób tak:
    -otwórz googla
    -otwórz notatnik
    -wklej w notatnik kod błędu
    -naciśnij spację
    -wklej/przepisz nazwę procedury która robi błąd (ReadProcessMemory)
    -usuń wszystko co znajduje się przed dwukropkiem w notatniku (łącznie z dwukropkiem)
    -wklej to co masz do googla
    -upewnij się że wszystko jest wklejone (Md5(tekst_w_googlu)=Md5(tekst_w_notatniku)).
    -szukaj
    -otwórz pierwszy link
    //Resztę pozostawia się czytelnikowi do samodzielnego wykonania.

(boże, odpowiadam o 1:30, @olesio miał rację, siedzę 24/7).

1

Człowieku ty robisz tu za moderatora, czy wujka dobrą radę? Nie wiem na cholerę się czepiasz, jak nie masz nic do wniesienia do tematu? Może po prostu nie pisz?

Poradziłem sobie, wystarczyło w zmiennej NB zmienić typ z LongWord na SIZE_T.

Pozdrawiam.

0

Człowieku ty robisz tu za moderatora, czy wujka dobrą radę? Nie wiem na cholerę się czepiasz, jak nie masz nic do wniesienia do tematu? Może po prostu nie pisz?

Nic do wniesienia? nawet nie mam po co komentować tego, bo widać że nie wiesz co znaczy 'nic do wniesienia do tematu'.

Poradziłem sobie, wystarczyło w zmiennej NB zmienić typ z LongWord na SIZE_T.

Mój pkt.5 z całą pewnością mówił o czymś całkowicie innym. Rzeczywiście, nic nie wniosłem do tematu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1