2

LabVIEWでDLLをロードする際に問題が発生しました。
LabVIEWを使用して流量計に接続しています。この目的のために、流量計を製造している会社からサブVIのライブラリを提供してもらいました。これらの各サブ VI は、同社が提供する 2 つの DLL ライブラリのいずれかから関数を呼び出します。

したがって、これらのサブ VI の半分は 1 つの DLL に依存し、残りの半分は他の DLL に依存します。最初の DLL を使用するものは問題なく動作し、問題はありません。しかし、2 番目の DLL を使用するものには何らかのバグがあります。これらのサブ VI のいずれかを開くたびに、次のようなポップアップ ウィンドウが表示されます。

「絶対パス\name.dll」のロード中にエラーが発生しました。DLL ライブラリの初期化ルーチンが失敗しました。

その場合、サブ VI は実行できず、実行ボタンはひび割れとして表示されます。しかし、ひねりがあります。「configure library function node」を右クリックして「Configure」を選択し、適切なフィールドでまったく同じdll 絶対パスを再度選択してから「OK」をクリックすると、サブ VI は完全に正常に動作し、本来の動作を正確に実行します。ノード構成ウィンドウで実際には何も変更せず、同じパスを再選択するだけです。さらに奇妙なことに、この奇妙な「トリック」は約 75% の確率でしか機能しません。残りの 25% の時間は、VI とそれを参照する他の VI を実際に閉じてから、再度開く必要があります。

そして、私にはさらに意味のない別のひねりがあります。会社は、さまざまなサブVIを相互に関連させて使用する方法を示す「サンプルVI」もいくつか送ってくれました。これらの例は完全にうまく動作します! しかし、その後、「サンプル VI」の単純なバージョンである独自の VI を作成しましたが、DLL ロード エラーが発生し続けます。

ライブラリ関数ノードを毎回再構成せずにVIが実行可能であることを確認するにはどうすればよいですか? 問題の原因は何だと思いますか?

注意: 問題の一部は、DLL の読み取りが labview でどのように機能するかをよく理解していないことです。そのため、それに関する情報も大歓迎です。

4

1 に答える 1

0

labviewで(dll内で)関数を呼び出す場合、.dllはここの場所にある必要があり、その場所にリンクされている(またはVI /実行可能ファイルと同じ場所であると信じています)。

たとえば、stdout を呼び出してコマンド プロンプトに書き込むサブ VI を作成すると、Windows DLL が呼び出されます。この dll は、多くの Windows プログラムが日常的に使用するために必要であるため、Windows コンピュータ以降のすべてのコンピュータで同じ場所にある必要があるため、常に配置されます。

c:\windows\system32\stdout.dll //note this is and example

新しい流量計 VI を使用したとき、ダイナミック リンク ライブラリが元の作成者 (または少なくとも最後の編集者) マシン上のどこにでも配置されることが期待されていました。それらがそこにない場合、LabView はびっくりします。

難しい方法ですが、再リンクして VI を作り直すことができます。申し訳ありませんが、おそらくそれらをリメイクする最も簡単な方法です。

于 2013-08-23T19:10:17.687 に答える