Subj. Je voudrais utiliser des chaînes au lieu de PChar parce que me épargne coulée beaucoup, mais si je fais justeEst-il prudent de transmettre des paramètres de chaîne const Delphi à travers les limites du gestionnaire de mémoire?
procedure SomeExternalProc(s: string); external SOMEDLL_DLL;
puis le mettre en œuvre dans un autre projet avec le gestionnaire de mémoire non partagée:
library SeparateDll;
procedure SomeExternalProc(s: string);
begin
//a bla bla bla
//code here code here
end;
Je n'ai (formellement) aucune garantie Delphi ne décide pas, pour quelque raison que ce soit, de modifier la chaîne, de modifier son compteur de référence, de la dupliquer ou de la rendre unique, ou quoi que ce soit d'autre. Par exemple
var InternalString: string;
procedure SomeExternalProc(s: string);
begin
InternalString := s;
end;
Delphi incrémente refcounter et copie un pointeur, c'est tout. J'aimerais que Delphi copie les données. Est-ce que déclarer le paramètre "const" le rend sûr pour cette raison? Si non, y a-t-il un moyen de le faire? paramètre Déclarant que PChar ne semble pas être une solution parce que vous devez jeter chaque fois:
procedure SomeExternalProc(s: Pchar); forward;
procedure LocalProc;
var local_s: string;
begin
SomeExternalProc(local_s); //<<--- incompatible types: 'string' and 'PAnsiChar'
end;
Tant que vous utilisez le type de chaîne lié à Delphi, il ne peut s'agir d'une DLL générique utilisable dans d'autres langues. Pourquoi donc éviter de partager le MM? –
Le type de chaîne est très compatible, il peut être interprété par d'autres langages comme PChar. Je ne parle pas de renvoyer des chaînes, bien sûr, juste des paramètres de chaîne. – himself
... ou des paquets? –