エラーにならないようにするには?


ムーミン  2005-12-15 22:37:37  No: 19249

この行でエラー(例外発生)になります。
  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;


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加