Subj. Ich möchte Strings statt PChar verwenden, weil das mir viel Gießen erspart, aber wenn ich nurIst es sicher, Delphi Const String Parameter über Speicher Manager Grenzen zu übergeben?
procedure SomeExternalProc(s: string); external SOMEDLL_DLL;
tun und setzen es dann in einem anderen Projekt mit nicht-Shared-Memory-Manager:
library SeparateDll;
procedure SomeExternalProc(s: string);
begin
//a bla bla bla
//code here code here
end;
Ich habe (formal) keine Garantie Delphi entschließt sich aus irgendeinem Grund nicht, die Zeichenkette zu ändern, ihren Referenzzähler zu ändern, sie zu duplizieren oder zu individualisieren, oder was auch immer. Zum Beispiel
Delphi inkrementiert refcounter und kopiert einen Zeiger, das ist es. Ich möchte, dass Delphi die Daten kopiert. Erklärt der Parameter "const" aus diesem Grund? Wenn nicht, gibt es einen Weg, es zu tun? Deklarieren Parameter als PChar scheint keine Lösung zu sein, weil Sie es jedes Mal werfen müssen:
procedure SomeExternalProc(s: Pchar); forward;
procedure LocalProc;
var local_s: string;
begin
SomeExternalProc(local_s); //<<--- incompatible types: 'string' and 'PAnsiChar'
end;
Warum möchten Sie kein freigegebenes MM verwenden? Solange Sie den an Delphi gebundenen Zeichenfolgetyp verwenden, kann es keine generische DLL sein, die aus anderen Sprachen verwendet werden kann. Warum vermeiden Sie das Teilen der MM? –
String-Typ ist durchaus kompatibel, es kann von anderen Sprachen als PChar interpretiert werden. Ich spreche natürlich nicht von Saitenrückläufen, sondern nur von Saitenparametern. – himself
... oder Pakete? –