theo hat geschrieben:Weiss nicht genau, was du meinst. Nur unter Linux gilt meist CDECL statt STDCALL.
Unter Linux wird überwiegend cdecl, unter Windows üblicherweise stdcall verwendet. Was davon (oder etwas ganz anderes) du verwendest hängt von dir und deinen Zielen ab.
Maik81ftl hat geschrieben:da ich Strings zw. den progis und den Lib's austausche, bin ich, und das war schon meine bittere Pille bei Delphi, auf die Unit Sharemem, angewiesen. Leider scheint die hier bei Larazus noch nicht vorhanden zu sein, bzw nur über eine Seberate DLL.
Die Unit Sharemem gibt es beim Free Pascal Compiler ebenfalls (Lazarus hat mit der nichts zu tun), aber eben nur unter Windows. Unter Linux kannst du ähnliches mit der Unit cmem erreichen, die die clib als Speichermanager verwendet.
Wenn du natürlich mit PChar arbeiten willst (funktioniert dann auch mit anderen Sprachen), geht das bspw. so:
Code: Alles auswählen
var
s: String;
ps: PChar;
begin
s := 'Hallo';
ps := 'Hallo2'; // kann man direkt im Quelltext so schreiben
s := ps; // wird automatisch in einen String kopiert, muss aber noch freigegeben werden, wenn es keinen konstanten String enthält
ps := PChar(s); // hier brauchst du einen typcasting; ps dürfte ungültig sein, wenn der Referenzzähler des ursprünglichen Strings auf 0 fällt und er freigegeben wird, sofern er kein konstanter String ist.
end;
Wenn du deine Bibliothek für mehrere Sprachen als Free Pascal verfügbar machen willst, musst du dich vorher auch mit Speicherverwaltung auseinandersetzen.