Wiem, że kiedy dzielę strings
pomiędzy APP i Delphi Delphi DLL muszę dodać Sharemem
zarówno aplikacji i dll źródła projektu jako pierwsza jednostka w uses klauzuli.Delphi Sharemem - Kiedy nie jest potrzebna
Ale jeśli funkcja eksportu dll akceptuje tylko Pchars
, ale wewnątrz niektórych metod dll używam strings
, czy powinienem również użyć sharemem? Pozwól mi pokazano przykładowy kod:
procedure ShowMyCustomMessage(aMessage : Pchar);
var
vUselessString : string;
begin
vUselessString := aMessage;
ShowMessage(vUselessString);
end;
exports
ShowMyCustomMessage;
w tym prosty i bezużytecznej przypadku dll jest przyjęcie Pchar
ale wewnątrz eksportowanego metody DLL tworzy string
var. Czy powinienem również dodać ShareMem
?
Co z numerem WideString
? Czy podanie parametrów WideString
wymaga użycia Sharemem
?
AFAIK 'ShareMem' jest używany, jeśli chcesz użyć przestarzałego menedżera pamięci borlndmm.dll. Ale to nie jest dobry pomysł od Delphi 2007. Lepiej użyj SimpleShareMem, który opiera się na FastMM4 i jest * znacznie * szybszy. –
@Arnaud jesteś pewien, że borlndmm jest przestarzałe? Nie widziałem, żeby ktoś o tym mówił. –
@RafaelColucci: * stary * borlndmm.dll. Mylące, wszystkie biblioteki DLL menedżera pamięci mają tę nazwę. Obecna wersja Delphi/C++ Builder wykorzystuje FastMM, skompilowany do 'borlndmm.dll' i ma już od kilku lat. –