この行でエラー(例外発生)になります。
ShellLink := CreateComObject(CLSID_ShellLink) as IShellLink;
なぜ、エラーになっているのかわからないので
直す方法も見つかりません。
エラーが発生している状況は
ステップ実行で、この行のあと最終の end; に飛んでしまいます。
エラーメッセージ(ダイアログ等)は表示されません。
この関数をアプリケーションから呼び出すと動作します。
DLLから呼び出した場合にこの現象になります。
DLL内からでは呼び出すことができないのでしょうか?
関数は以下のように作っています。
(実はほとんどがどこかからのコピーです)
---------------------------------------------------------------------
type
TShortCutData = record
FileName: String;
PathName: String;
WorkFolder: String;
Option: String;
end;
function GetLinkPath(FileName: String): TShortCutData;
var
ShellLink : IShellLink;
PersistFile : IPersistFile;
FilePath : array[0..MAX_PATH] of char;
WorkDir : array[0..MAX_PATH] of char ;
Arg : array[0..MAX_PATH] of char;
FileLink : String;
wsz : array[0..MAX_PATH] of WideChar;
pfd : TWin32FindData;
begin
FileLink := FileName;
ShellLink := CreateComObject(CLSID_ShellLink) as IShellLink;
OleCheck(ShellLink.QueryInterface(IPersistFile,PersistFile));
Assert(Assigned(PersistFile));
MultiByteToWideChar(CP_ACP,0,PChar(FileLink),-1,wsz,MAX_PATH);
OleCheck(PersistFile.Load(wsz,0));
OleCheck(ShellLink.GetPath(FilePath,MAX_PATH,pfd,SLGP_RAWPATH));
OleCheck(ShellLink.GetWorkingDirectory(WorkDir,MAX_PATH));
OleCheck(ShellLink.GetArguments(Arg, MAX_PATH));
//上から順にプログラムパス名,作業フォルダ,起動オプション
//実際のPCではリンク先としてパス名に起動オプションが付加されている
Result.FileName := ExtractFileName(FileName);
Result.PathName := StrPas(FilePath);
Result.WorkFolder := StrPas(WorkDir);
Result.Option := StrPas(Arg);
end;
ツイート | ![]() |