一次在调用接口函数获取快捷方式信息时,总是遇到意外,一直查来查去查了好半天,原代码如下: function GetShortCutImf(LinkFileName:string; var ShortCutImf:TShortCutImf):boolean;varvShellLink: IShellLink; vPersistFile: IPersistFile; vUnKnown: IUnKnown;vWin32FindData: TWin32FindData;vBuffer: array[0..100] of Char;pword:Word;PCmd:integer;ffd:WIN32_FIND_DATA;ret:Longint;beginResult:=true;try vUnKnown := CreateComObject(CLSID_ShellLink); vShellLink := vUnKnown as IShellLink; vPersistFile := vUnKnown as IPersistFile; if vPersistFile.Load(PWideChar(LinkFileName),0)=s_OK then//就在这里总是出错 begin ret:=vShellLink.GetPath(vBuffer,SizeOf(vBuffer),ffd,SLGP_UNCPRIORITY); //Pchar(s),MAX_PATH ....... 最后终于发现一个小细节,在PWideChar(LinkFileName)上,原来以为这样简单转换,就可以把ANSI字符串转为WIDESTRING指针,结果系统豪不转换的直接把LinkFileName的指针当做widestring指针传过去了,怪不得系统老执行不下去。看来一个转换的语句还是不可少啊,增加后问题解决,特立此备忘。 function GetShortCutImf(LinkFileName:string; var ShortCutImf:TShortCutImf):boolean;varvShellLink: IShellLink; vPersistFile: IPersistFile; vUnKnown: IUnKnown;vWin32FindData: TWin32FindData;vBuffer: array[0..100] of Char;pword:Word;PCmd:integer;ffd:WIN32_FIND_DATA;ret:Longint;ws:WideString;beginResult:=true;try vUnKnown := CreateComObject(CLSID_ShellLink); vShellLink := vUnKnown as IShellLink; vPersistFile := vUnKnown as IPersistFile; ws:=LinkFileName; if vPersistFile.Load(PWideChar(ws),0)=s_OK then begin ret:=vShellLink.GetPath(vBuffer,SizeOf(vBuffer),ffd,SLGP_UNCPRIORITY); //Pchar(s),MAX_PATH .......

评论