CnPack Forum » CnVCL 组件包 » CnCommon单元SearchPath函数的参数有问题?


2010-8-18 10:30 yinsim
CnCommon单元SearchPath函数的参数有问题?

[code]// 调用 SearchFile 在当前目录、系统目录和 PATH 变量中查找指定扩展名的文件。
// FileName 为不带扩展名的文件名,Ext 为扩展名,成功返回全路径文件名,失败返回空。
function CnSearchFile(const FileName: string; const Ext: string = '.exe'): string;
var
  fn: array[0..MAX_PATH] of Char;
  pc: PChar;
begin
  if SearchPath(nil, PChar(FileName), PChar(Ext), SizeOf(fn), fn, pc) <> 0 then
    Result := fn;
end;[/code]

[code]DWORD SearchPath(
  LPCTSTR lpPath,
  LPCTSTR lpFileName,
  LPCTSTR lpExtension,
  DWORD nBufferLength,
  LPTSTR lpBuffer,
  LPTSTR* lpFilePart
);

nBufferLength
[in] The size of the buffer that receives the valid path and file name, in TCHARs. [/code]


SearchPath的最四个参数是缓冲区大小,CnCommon单元使用的是SizeOf()函数,而个人觉得取字符数组的长度应该用Length().
在Delphi2010 的Unicode 环境下,使用CnCommon的CnSearchFile会引起内存非法访问,并导致程序退出.使用Length()则没有问题.
显然这里没有处理好双字节的问题.同样的原因,FindExecFile函数也会有此问题.麻烦开发组人员帮忙检查下.

[[i] 本帖最后由 yinsim 于 2010-8-18 10:32 编辑 [/i]]

2010-8-20 22:07 Passion
感谢指出,已修正并提交至SVN。

页: [1]


Powered by Discuz! Archiver 5.0.0  © 2001-2006 Comsenz Inc.