PWideChar与内存漏洞
在delphi中,调用此函数,要用到PWideChar类型
function NetSessionEnum(ServerName, UncClientName,UserName: PWideChar;
Level: DWord; var Buffer: Pointer;PrefMaxLen: DWord;
var EntriesRead,TotalEntries,ResumeHandle: DWord): LongWord; stdcall;external 'netapi32.dll';
为了把常用的string类型,转换为PWideChar,最简单的有StringToOleStr
delphi的帮助中对于函数的说明为:
Allocates memory and copies an AnsiStringa string to the OLE format.
此函数会分配一些内存来存放PWideChar类型的字符串,但是我找了很久也没找到用什么函数成功的释放掉这个内存。
一次分配耗费的内存很小,但是多次调用,比如:上万次累积后却会很容易耗费数M的内存。
程序的内存消耗可以从win2k的进程管理器中可以看。以下程序演示了多数调用StringToOleStr。
rocedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
for i := 0 to 5000 do
begin
StringToOleStr('testtesttesttesttesttesttest');
end;
end;
从进程管理器中看,运行一次此过程,程序占用多了400多k
写了这么多,只是想怎么释放掉StringToOleStr分配的内存?
有另外的办法,不用StringToOleStr,改用
function MyStringToWideChar(str:string):PWideChar;
var
dest:array[0..255] of WideChar;
begin
StringToWideChar(str,@dest,length(dest)+1);
result := dest;
end;
有没有更好的办法?