Ich Zuteilung Speicher für mehrere PWideChar auf meinem Haupt-ausführbare DateiWo/Wann PWideChars frei an externe DLL gesendet
var
pwcValor: PWideChar;
begin
pwcValor := AllocMem(sizeof(WideChar) * Succ(Length(pValor)));
StringToWideChar(pValor, pwcValor, Succ(Length(pValor)));
pMetodo(pCodigo, pCodigoParametro, pwcValor);
Alle diese Variablen werden auf eine externe DLL gesendet über die späte Bindung verwenden. Ich habe einige Fragen zu dieser Situation, um Speicherlecks zu vermeiden.
Wenn ich sie innerhalb der externen DLL (die auch meine ist) aufrufen, erhalte ich Zugriffsverletzungen, wenn ich versuche, die DLL-Bibliothek aus dem Speicher zu entladen.
Tks
EDIT
Etwas, was ich zu fragen, vergessen zu. Und umgekehrt? Ich habe also Rückgabeparameter von meiner DLL zur EXE, also sind die PWideChars auf die DLL zugeteilt. Also, ich müsste sie auf der DLL freigeben, oder? Aber ich werde sie wahrscheinlich immer noch auf der EXE verwenden. Muss ich im EXE vorbelegen, an die DLL den Zeiger senden und in diesen Fällen die DLL ausfüllen? Oder erstellen Sie einfach eine Kopie des zurückgegebenen Parameters in der EXE, damit ich es sicher auf der DLL freigeben kann?
@PA, muss ich die Zeiger aller zugewiesenen PWideChars an die DLL gesendet, damit sie später freigegeben werden können, nicht wahr? Eine andere Frage, die ich vergessen habe zu fragen ... und umgekehrt? Ich habe einige PWideChar zurückgegeben, die auf der DLL zugeordnet sind, die ich an die EXE zurückgeben. Ich kann sie in der DLL nicht freigeben, da sie immer noch von der EXE verwendet werden. Tks – Pascal
EXE-Code kann Speicher nicht freigegeben durch eine DLL freigeben. Wenn Sie ** Mem ** in der DLL reservieren müssen, dann müssen Sie es in der DLL freigeben, vielleicht in einer Funktion, die von der EXE aufgerufen werden kann, wenn Sie mit dem zurückgegebenen Mem fertig sind. Allerdings würde ich versuchen, DLL-Alloc zu vermeiden, und immer mem von der EXE –
Tks für die Antwort @PA! – Pascal