Ich habe auch schon Windows-
API Funktionen gesehen, die dann ihre Freigabe-Routine mitgeben. Man macht das im Aufruf dann so :
Code:
const
CurrentServerHandle = 0;
WTSEnumerateSessions : TWTSAPI32_WTSEnumerateSessions = NIL;
WTSFreeMemory : TWTSAPI32_WTSFreeMemory = NIL;
procedure ShowSessions;
var
Count : DWord;
pSessionInfo : pTWtsSessionInfo;
begin
Lib := LoadLibrary('WTSAPI32.DLL');
@WTSEnumerateSessions := GetProcaddress(Lib, pChar('WTSEnumerateSessionsW'));
@WTSFreeMemory := GetProcaddress(Lib, pChar('WTSFreeMemory'));
if WTSEnumerateSessions(CurrentServerHandle, 0, 1, pSessionInfo, Count) then
begin
// DoSometing
end;
WTSFreeMemory(pSessionInfo);
end;
Wie Du siehst, Die
DLL stellt dir 2 Funktionen zur Verfügung, da sie den Speicher alloziert und deswegen auch wieder freigeben muss.
Ist es eine fixe Länge kannst Du auch den schon allozierten Speicher als Parameter übergeben und auf Deiner Seite dann auch wieder freigeben (was dummzeuch ja auch schon geschrieben hatte).
Was du NICHT machen kannst ist Speicher in der
DLL allozieren und beim Aufrufer in der Exe freigeben, weil das unterschiedliche MemoryManager sind.