在 delphi XE7 中使用 UrlCreateFromPath
Using UrlCreateFromPath in delphi XE7
我在Whosebug中找到了下一个函数代码。
当我尝试将诸如 'C:\teste.zip' 的文件转换为 URL 格式时,生成的字符串包含额外的尾随 #0 字符。我的结果是 ' 'file:///C:/teste.zip#0'
我究竟做错了什么?
提前致谢,路易斯
function FilePathToURL(const FilePath: string): string;
var
Buffer: string;
BufferSize: DWORD;
begin
Result := '';
BufferSize := Length('file:///' + FilePath + #0);
SetLength(Buffer, BufferSize);
if UrlCreateFromPath(PChar(FilePath), PChar(Buffer), @BufferSize, 0) = S_OK then
Result := Buffer;
end;
代码看起来不错,我刚测试过:
function FilePathToURL(const FilePath: string): string;
var
Buffer: string;
BufferSize: DWORD;
begin
Result := '';
BufferSize := Length('file:///' + FilePath + #0);
SetLength(Buffer, BufferSize);
if UrlCreateFromPath(PChar(FilePath), PChar(Buffer), @BufferSize, 0) = S_OK then
Result := Buffer;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ListBox1.Items.Add(FilePathToURL(Edit1.Text));
end;
也许如果你 post 你的完整代码,你是如何调用函数的...
您计算预期 BufferSize
的方式有误。根据 MS documentation,最大预期长度为 INTERNET_MAX_URL_LENGTH
。
将 Path 转换为 Url 的正确代码是:
const
INTERNET_MAX_URL_LENGTH = 2048 + 32 + 3;
function FilePathToURL(const FilePath: string): string;
var
Buffer: array [0.. INTERNET_MAX_URL_LENGTH - 1] of Char;
BufferSize: DWORD;
begin
Result := '';
BufferSize := INTERNET_MAX_URL_LENGTH;
if UrlCreateFromPath(PChar(FilePath), @Buffer, @BufferSize, 0) = S_OK then
Result := Buffer;
end;
我在Whosebug中找到了下一个函数代码。 当我尝试将诸如 'C:\teste.zip' 的文件转换为 URL 格式时,生成的字符串包含额外的尾随 #0 字符。我的结果是 ' 'file:///C:/teste.zip#0' 我究竟做错了什么? 提前致谢,路易斯
function FilePathToURL(const FilePath: string): string;
var
Buffer: string;
BufferSize: DWORD;
begin
Result := '';
BufferSize := Length('file:///' + FilePath + #0);
SetLength(Buffer, BufferSize);
if UrlCreateFromPath(PChar(FilePath), PChar(Buffer), @BufferSize, 0) = S_OK then
Result := Buffer;
end;
代码看起来不错,我刚测试过:
function FilePathToURL(const FilePath: string): string;
var
Buffer: string;
BufferSize: DWORD;
begin
Result := '';
BufferSize := Length('file:///' + FilePath + #0);
SetLength(Buffer, BufferSize);
if UrlCreateFromPath(PChar(FilePath), PChar(Buffer), @BufferSize, 0) = S_OK then
Result := Buffer;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ListBox1.Items.Add(FilePathToURL(Edit1.Text));
end;
也许如果你 post 你的完整代码,你是如何调用函数的...
您计算预期 BufferSize
的方式有误。根据 MS documentation,最大预期长度为 INTERNET_MAX_URL_LENGTH
。
将 Path 转换为 Url 的正确代码是:
const
INTERNET_MAX_URL_LENGTH = 2048 + 32 + 3;
function FilePathToURL(const FilePath: string): string;
var
Buffer: array [0.. INTERNET_MAX_URL_LENGTH - 1] of Char;
BufferSize: DWORD;
begin
Result := '';
BufferSize := INTERNET_MAX_URL_LENGTH;
if UrlCreateFromPath(PChar(FilePath), @Buffer, @BufferSize, 0) = S_OK then
Result := Buffer;
end;