Einzelnen Beitrag anzeigen

Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

Re: C-Library in Delphi einbinden

  Alt 23. Dez 2005, 10:32
Bei den Schweizern gibt's hier einen Beispielcode, der malloc, realloc und free aus msvcrt.dll einbindet und damit den Borland Memory-Manager überflüssig macht.

Ähnlich sähe es bei dir auch aus. Wenn du die Routinen nicht benutzt, dann reicht es wahrscheinlich sogar aus, sie ohne wirklichen Prototypen zu deklarieren - es muss ja nur der Name bekannt sein.

Beispiel:
Delphi-Quellcode:
implementation

const
  msvcrt = 'msvcrt.dll';

procedure printf; cdecl; external msvcrt;
procedure fopen; cdecl; external msvcrt;
procedure fclose; cdecl; external msvcrt;
// ...
Wenn der eingebundene C-Code Speicher benötigt, dann solltest du allerdings entweder den in der Bibliothek oben beschriebenen Weg gehen oder die Funktionen selbst neu definieren, also:

Delphi-Quellcode:
function malloc(size: integer): pointer; cdecl;
begin
  Result := AllocMem(size);
end;

function calloc(count, size: integer): pointer; cdecl;
begin
  Result := AllocMem(count * size);
  FillChar(Result^, count * size, #0);
end;

function realloc(ptr: pointer; size: integer): pointer; cdecl;
begin
  Result := ReAllocMem(ptr, size);
end;

procedure free(ptr: pointer); cdecl;
begin
  FreeMem(ptr);
end;
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat