朝花朝拾

朝花昔时杯中酒

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

function FormatEx(const AFormatStr: string; AParams: array of const): PChar;
var
MssageBuf: PChar;
MssageParam: PDWORDArray;
i, Len: Integer;
begin
try
Result := nil;
MssageParam := nil;
if AFormatStr = '' then Exit;
Len := Length(AParams);
if Len > 0 then
begin
MssageBuf := Windows.HeapAlloc(Windows.GetProcessHeap, Const_HEAP_PTR, 1024);
if MssageBuf = nil then Exit;
MssageParam := Windows.HeapAlloc(Windows.GetProcessHeap, Const_HEAP_PTR, (Len * Sizeof(DWORD)));
try
if MssageParam = nil then Exit;
for i := Low(AParams) to High(AParams) do
if AParams[i].VType = vtString then
MssageParam^[i] := DWORD(PChar(DWORD(AParams[i].VString) + 1))
else
MssageParam^[i] := DWORD(AParams[i].VInteger);
Len := Windows.wvsprintf(MssageBuf, PChar(AFormatStr), PChar(MssageParam));
MssageBuf[Len] := Char($0);
finally
if MssageParam <> nil then
Windows.HeapFree(Windows.GetProcessHeap, 0, MssageParam);
end;
Result := PChar(MssageBuf);
end
else
Result := PChar(AFormatStr);
except
on E: Exception do
begin
  showmessage( E.Message);
end;
end;
end;

posted on 2015-04-23 14:08  朝花朝拾  阅读(188)  评论(0编辑  收藏  举报