正文

一次调用接口函数遇到麻烦后的经验教训2010-03-31 16:25:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/otot/50852.html

分享到:

一次在调用接口函数获取快捷方式信息时,总是遇到意外,一直查来查去查了好半天,原代码如下: 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    .......

阅读(2126) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册