// 调用 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;
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.
SearchPath的最四个参数是缓冲区大小,CnCommon单元使用的是SizeOf()函数,而个人觉得取字符数组的长度应该用Length().
在Delphi2010 的Unicode 环境下,使用CnCommon的CnSearchFile会引起内存非法访问,并导致程序退出.使用Length()则没有问题.
显然这里没有处理好双字节的问题.同样的原因,FindExecFile函数也会有此问题.麻烦开发组人员帮忙检查下.
[
本帖最后由 yinsim 于 2010-8-18 10:32 编辑 ]