[gelöst] TlHelp32.pas Error: Can't assign values to an add

Antworten
Linkat
Lazarusforum e. V.
Beiträge: 530
Registriert: So 10. Sep 2006, 23:24
OS, Lazarus, FPC: Linux Mint 21.3; Lazarus 3.0 FPC 3.2.2; RaspiOS
CPU-Target: AMD 64, ARM 32
Wohnort: nr Stuttgart

[gelöst] TlHelp32.pas Error: Can't assign values to an add

Beitrag von Linkat »

Hallo,
ein Programm A soll ein anderes Programm B starten, soll aber vorher testen, ob das Programm B schon läuft.
Im Delphi-Treff findet man da einige gute Vorschläge für Delphi, die alle die unit TlHelp32.pas nutzen. Die unit habe ich mir von
http://hiasm.googlecode.com/svn/elements/delphi/code/TlHelp32.pas
heruntergeladen.
Beim kompilieren erfolgt an der Stelle:

Code: Alles auswählen

 
var
  KernelHandle: THandle;
  _CreateToolhelp32Snapshot: TCreateToolhelp32Snapshot;
  _Heap32ListFirst: THeap32ListFirst;
  _Heap32ListNext: THeap32ListNext;
  _Heap32First: THeap32First;
  _Heap32Next: THeap32Next;
  _Toolhelp32ReadProcessMemory: TToolhelp32ReadProcessMemory;
  _Process32First: TProcess32First;
  _Process32Next: TProcess32Next;
 
function InitToolHelp: Boolean;
begin
  if KernelHandle = 0 then
  begin
    KernelHandle := GetModuleHandle(kernel32);
    if KernelHandle <> 0 then
    begin
      @_CreateToolhelp32Snapshot := GetProcAddress(KernelHandle, 'CreateToolhelp32Snapshot');  <-- hier und in den folgenden Zeilen entsteht der Fehler
      @_Heap32ListFirst := GetProcAddress(KernelHandle, 'Heap32ListFirst');
      @_Heap32ListNext := GetProcAddress(KernelHandle, 'Heap32ListNext');
      @_Heap32First := GetProcAddress(KernelHandle, 'Heap32First');
      @_Heap32Next := GetProcAddress(KernelHandle, 'Heap32Next');
      @_Toolhelp32ReadProcessMemory := GetProcAddress(KernelHandle, 'Toolhelp32ReadProcessMemory');
      @_Process32First := GetProcAddress(KernelHandle, 'Process32First');
      @_Process32Next := GetProcAddress(KernelHandle, 'Process32Next');
 


der Fehler:

Code: Alles auswählen

TlHelp32.pas(323,7) Error: Can't assign values to an address
 


Besteht vielleicht zwischen Lazarus und Delphi ein Unterschied in der Schreibweise bei Pointern?

Hat jemand eine Idee?

Gruß, Linkat
Zuletzt geändert von Linkat am Mi 27. Mär 2013, 11:58, insgesamt 1-mal geändert.
Linux Mint 21; Lazarus 2.2.4 FPC 3.2.2; RaspiOS

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: TlHelp32.pas Error: Can't assign values to an address

Beitrag von theo »

Ja, das muss man anders machen afaik.

Bsp:

Code: Alles auswählen

var
  mdb_read_pg: function(mdb: pMdbHandle; pg: dword): ssize_t; cdecl;
....
 
procedure Loadmdbtools(lib: pchar);
begin
  hlib := LoadLibrary(lib);
  if hlib = 0 then
    raise Exception.Create(format('Could not load library: %s', [lib]));
 
  pointer(mdb_read_pg) := GetProcAddress(hlib, 'mdb_read_pg');
....


Sehr hilfreich auch das Programm h2pas mit dem Parameter -P

Linkat
Lazarusforum e. V.
Beiträge: 530
Registriert: So 10. Sep 2006, 23:24
OS, Lazarus, FPC: Linux Mint 21.3; Lazarus 3.0 FPC 3.2.2; RaspiOS
CPU-Target: AMD 64, ARM 32
Wohnort: nr Stuttgart

Re: TlHelp32.pas Error: Can't assign values to an address

Beitrag von Linkat »

Hallo theo,
vielen Dank für die schnelle Antwort. Leider kann ich damit fast nichts anfangen. Du meinst wahrscheinlich ich sollte mir etwas aus einer C Bibliothek suchen und in Pascal übersetzen.

Aber gerade eben ist mir die Idee gekommen es mit

Code: Alles auswählen

{$MODE Delphi}


zu testen. Tatsächlich es funktioniert.

Gruß, Linkat
Linux Mint 21; Lazarus 2.2.4 FPC 3.2.2; RaspiOS

Antworten