NI製品ディスカッション

キャンセル
次の結果を表示 
次の代わりに検索 
もしかして: 

LabVIEW 2014でDLLインポート時に表示されるエラー/警告に関して

解決済み
解決策を見る

皆様、こんにちは。

 

現在、以下の呼び出し階層を持つ

 

  アルファ.dll → ベータ.dll → ガンマ.dll

 

アルファ.dllをLabVIEWのプロジェクトにインポートすると、以下のメッセージが表示されます。

 

 

*****************************************************************************************************

実行可能ではないVI
VIは以下の理由で実行ファイルではありません:
1. 共有ライブラリまたは依存ファイルがインストールされいません。VIを実行可能にするには、

VIを実行するコンピュータに共有ライブラリおよびすべてのサポートファイルをインストールする

必要があります。
2. 必要なカスタム制御器が空または見つかりません。VIを実行可能にするには、カスタム制御

器を手動で更新します。
3. VIはサポートされていないデータタイプと一緒のパラメータを含みます。VIを実行可能にする

には、ウィザードが生成する空のクラスタをサポートされたデータタイプを使用する制御器または

表示器に置換します。

*****************************************************************************************************

 

 

なお、ベータ.dllとガンマ.dllはあるデバイスのSDKで、ベータはガンマのラッパーという関係に

なっており、インポートが必要なのは自作したアルファ.dllです。

 

 

 

 Q.1 これはインポート時にベータ.dllとガンマ.dllが見つからなかったために表示される警告で、

    実際に実行する際にこれらのDLLをVI直下のディレクトリーに保存しておくか、PATHが通

    っているディレクトリーに保存しておけば問題なく実行できるのでしょうか。

 

 Q.2 もしこのままでは実行に問題があるのなら、その対処法はどこに記述してあるのでしょ

    うか。ヘルプでインポート関連の項目を探してみましたが、該当する内容は見つけられま

    せんでした。

 

 

上記に関し、ご存じの方がいらっしゃいましたら、ご教示の程よろしくお願い申し上げます。

 

 

0 件の賞賛
メッセージ1/5
4,563件の閲覧回数

わざと依存するDLLを消してインポートしようとしましたが問題を再現できませんでした。(LabVIEW 2014)

 

「ご存知の方」と聞くよりも再現するDLLを開示して解決策を募るほうが回答が得られる可能性はあがるかと思います。

 

「プロジェクトにインポート」とは、ツールメニューのインポート→共有ライブラリ(.dll)であっていますでしょうか。

 

ためしに同じフォルダにDLLをコピーした場合はどうなるのでしょうか。また、SDKとのことですがビルドしようとしているPCにはそのSDKはインストールされているのでしょうか。

 

インポートウィザードではなく、直接関数ライブラリ呼び出しノードにて呼び出した場合は実行可能なのでしょうか。

 

教えていただけると幸いです。よろしくお願いします。

0 件の賞賛
メッセージ2/5
4,550件の閲覧回数
解決策
トピック作成者が受理

高須様

 

アドバイスありがとうございます。

 

そうですね。具体的なDLLを提示してアドバイスを募った方が解決策を提示しやすいかもしれませんね。

 

まず、ご確認の項目に答える形で順に状況を説明します。

 

1 インポートはツールメニューから、インポート→共有ライブラリー(.dll)で行なっています。

 

2 現在、プロジェクトのディレクトリー構成は以下のようになっています。

   /--- LabVIEWアプリ本体

   |     アルファ.dll

   |     アルファ.h

   |     ベータ.dll

   |     ガンマ.dll

   |

   +-- Userlibs

      |-- A Lib

      |-- B Lib

      |-- アルファ Lib

         アルファ.dll

 

  インポート元のアルファ.dllとアルファ.hはLabVIEWアプリ本体直下にあり、アルファ.dllインポート時に

  「dllをコピーする」にチェックを付けた結果、ターゲットのUserlibs/アルファ Libにコピーされたものです。

 

 

3 関数ライブラリ読み出しノードを使っては試していません。

 

  ただ、アルファの関数を呼出すコンソール・アプリを別に作成し、これを実行すると問題なく動作します。

  このとき、コンソール・アプリのexeファイルとアルファ、ベータ、ガンマの各DLLは同じディレクトリーに

  あります。

 

 

ちょっと前に試してみて、進展がありました。

 

1 インポートするDLLの依存DLLのインストール場所を確認したところ、デバイス付属のアプリケーションが

  インストールされたディレクトリーにだけ保存されており、ここにはPATHが通っていませんでした。

 

2 一旦作成されたアルファ Libディレクトリーに依存するベータ.dllとガンマ.dllをコピーしておき、アルファ.dll

  を更新モードにて再度インポートしたところ、今度はエラー/警告メッセージが表示されることもなく、問題

  なくインポートできました。

 

 

結局のところ、依存DLLを見つけられなかったことが問題の本質だったようです。

 

お騒がせして申し訳ありませんでした。

 

メッセージ3/5
4,534件の閲覧回数

宙様

 

無事ご解決されて何よりです。なんだか余計な口出しをしてしまい大変恐縮です。

 

貴重な情報をありがとうございます。きっと後の人が参照して解決に役立てることと思います。

 

今後ともよろしくお願いします。

0 件の賞賛
メッセージ4/5
4,522件の閲覧回数

高須様

 

いえいえ、余計な口出しだなんてとんでもありません。

何かしらのアドバイスが直接的な解決策でなくとも、解決の糸口になることが多々ありますので。

 

今後とも、よろしくお願い致します。

0 件の賞賛
メッセージ5/5
4,519件の閲覧回数