実行可能ファイルが指定のパスでもDLLを見つけることができません

更新しました Jul 31, 2023

使用製品

ソフトウェア

  • LabVIEW Base
  • LabVIEW Full
  • LabVIEW Professional

問題

ライブラリ関数呼び出しノードでDLLを呼び出すVIがあります。開発環境では、DLLが正しく呼び出され、アプリケーションは期待どおりに動作します。実行可能ファイルをビルドすると、DLLを探すように求められます。プロンプトが表示されないようにするにはどうすればよいですか?

解決策

実行可能ファイルは、特定のディレクトリでのみDLLを検索します。 Windowsは、DLLの場所を下記の順番で検索します。
  1. 実行可能ファイルが実行されている現在のディレクトリ
  2. Windowsシステムディレクトリ(<Windows>\System32
  3. PATH環境変数で指定されたパス
デフォルトでは、LabVIEWはライブラリ関数呼び出しノードで呼び出されたほとんどのDLLを実行可能ファイルのデータディレクトリにコピーします。

追加情報

アプリケーションでuser32.dllまたは別のWinAPI DLLを使用していて、ディスク上のライブラリの場所を正しく指定していない場合、実行可能ファイルを実行しようとすると、次のエラーが発生することがあります。

エントリポイントが見つかりません: wcscat_sをダイナミックリンクライブラリntdll.dllに配置できませんでした。

共有ライブラリを呼び出す実行可能ファイルをビルドすると、LabVIEWはビルドのデータサポートディレクトリにDLLのローカルコピーを含めます。実行可能ファイルが実行されると、LabVIEWランタイムエンジンはまずこのディレクトリの共有ライブラリを検索します。これにより、ランタイムエンジンは、WinAPI DLLの間違ったバージョンを展開コンピューター上で呼び出してしまい、さまざまな問題を引き起こします。

システムディレクトリにあるWinAPI DLLを呼び出す場合は、次の3つのオプションがあります。
  • ライブラリ関数呼び出しノードにパスなしのDLLファイル名を入力します。これにより、アプリケーションをビルドするときに、データディレクトリにDLLのコピーが作成されることがなくなります。
  • WinAPI DLLをデータディレクトリから削除します。実行可能ファイルは、実行可能ファイルを起動するたびにDLLを検索します。これを修正するには、実行可能ファイルのVI検索パス(ツール>>オプション>>パス>>VI検索パス)に<Windows>\System32フォルダを追加します。
  • ライブラリ関数呼び出しノードのダイアログボックスでダイアグラムでパスを指定チェックボックスにチェックを入れ、共有ライブラリへのパスをブロックダイアグラムからパス入力をできるようにします。