05-27-2015 05:18 AM
皆様、こんにちは。
現在、以下の呼び出し階層を持つ
アルファ.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 もしこのままでは実行に問題があるのなら、その対処法はどこに記述してあるのでしょ
うか。ヘルプでインポート関連の項目を探してみましたが、該当する内容は見つけられま
せんでした。
上記に関し、ご存じの方がいらっしゃいましたら、ご教示の程よろしくお願い申し上げます。
解決済! 解決策の投稿を見る。
05-27-2015 01:21 PM
わざと依存するDLLを消してインポートしようとしましたが問題を再現できませんでした。(LabVIEW 2014)
「ご存知の方」と聞くよりも再現するDLLを開示して解決策を募るほうが回答が得られる可能性はあがるかと思います。
「プロジェクトにインポート」とは、ツールメニューのインポート→共有ライブラリ(.dll)であっていますでしょうか。
ためしに同じフォルダにDLLをコピーした場合はどうなるのでしょうか。また、SDKとのことですがビルドしようとしているPCにはそのSDKはインストールされているのでしょうか。
インポートウィザードではなく、直接関数ライブラリ呼び出しノードにて呼び出した場合は実行可能なのでしょうか。
教えていただけると幸いです。よろしくお願いします。
05-28-2015 12:22 AM
高須様
アドバイスありがとうございます。
そうですね。具体的な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を見つけられなかったことが問題の本質だったようです。
お騒がせして申し訳ありませんでした。
05-28-2015 06:13 AM
宙様
無事ご解決されて何よりです。なんだか余計な口出しをしてしまい大変恐縮です。
貴重な情報をありがとうございます。きっと後の人が参照して解決に役立てることと思います。
今後ともよろしくお願いします。
05-28-2015 06:20 AM
高須様
いえいえ、余計な口出しだなんてとんでもありません。
何かしらのアドバイスが直接的な解決策でなくとも、解決の糸口になることが多々ありますので。
今後とも、よろしくお願い致します。