From Friday, April 19th (11:00 PM CDT) through Saturday, April 20th (2:00 PM CDT), 2024, ni.com will undergo system upgrades that may result in temporary service interruption.

We appreciate your patience as we improve our online experience.

NI製品ディスカッション

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

LabVIEWからの.NETモジュールの呼び出しについて

解決済み
解決策を見る

皆様

LabVIEW初心者です。

.NETのモジュールのインターフェースをLabVIEWから呼びたいのですが、実行中にエラーが発生して、できません。

LabVIEWのGraphical Codeとしては、インスタンス作成⇒メソッドインボーク⇒終了という簡単なものなのですが、

同じモジュールを.NETアプリから呼び出した場合はエラーが起きないにもかかわらず、LabVIEWを実行したときはメソッドインボークのところで、エラーが発生してしまいます。(実行中にE_FAILが返されることによるエラー)

実際のところ、COMインターフェースをラップするように.NETのモジュールを作成しており、内部に特殊なインターフェースを介している場合は呼び出せないのかなと思ったりしています。

内部のDLLのCOMインターフェースを「ライブラリ関数呼び出しノード」を使って呼び出せるかどうかも試しましたが、呼び出せるインターフェースのリストに出てこず、呼び出すことは不可能でした。

Wireする方法が間違っているのか、COMインターフェースを含むモジュールはLabVIEWから呼び出せないのか、はっきりさせる必要があるため、投稿させていただきました。

 

以上、よろしくお願いします。

0 件の賞賛
メッセージ1/6
2,444件の閲覧回数

平素よりNI製品をご愛顧頂きありがとうございます。
日本ナショナルインスツルメンツ技術部の上野です。

 

VB.NETで内部でCOMインターフェイスのラッパーとなっているモジュールからクラスライブラリ(dll)を作成して、LabVIEWで.NETサブパレットにあるノードを使用して呼び出そうとすると、E-FAILエラーが発生するとことですが、E-FAILエラーは予期しないエラーを意味しますので、原因を特定するには至りませんでした。

 

問題の切り分けとして開発言語とLabVIEW以外の他言語で作成されたライブラリが呼び出せるかを確認してみては如何でしょうか?

 

内部のDLLがライブラリ関数呼び出しノードでも呼び出せないとのことですが、そのDLLに関する情報はございますか?作成者が何かしらの情報を開示しているのでしたら確認は可能かと思います。

 

0 件の賞賛
メッセージ2/6
2,407件の閲覧回数

日本ナショナルインスツルメント御中 上野様

 

ご返信ありがとうございます。

説明足らずで申し訳ございませんが、正確にはVBではなく、C#の方です。

既に自分で組んだC#のプログラムから該当モジュールのインターフェースをエラー無く呼び出せることは確認しています。

 

また、内部のDLLのCOMインターフェースですが、

COMオブジェクトの基底クラスにあるDllGetClassObjectのようなメソッドはリストに出てくるのですが、自分で作成したクラスのメソッドがリストに出てきませんでした。最初は.cppファイルを分けていたので、それが原因かなと思い、基底クラスが実装されているファイルに実装をまとめたのですが、それでも「ライブラリ関数呼び出しノード」の設定内のメソッドリストには出てきませんでした。

 

次の段階になってしまいますが、VI上にボタンを用意して、ボタンをクリックすると、該当COMインターフェースを呼び出せるようにするにはどのようにLabVIEWプログラムを描けばいいでしょうか?

 

以上、よろしくお願い申し上げます。

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

C#だったのですね、失礼致しました。その環境下では問題ないとのこと承知しました。それ以外の言語でも呼び出せればLabVIEW側に原因があるかと思い提案いたしました。

 

C#でしたらライブラリ関数呼び出しノードではなく、.NET関数群(.NETサブパレット)を使用することになると思いますので、利用するにあたりヘルプにある情報を参照いただけると幸いです。参照方法は以下のとおりです。

 

  1. ヘルプメニュー >> LabVIEWヘルプ...を選択します。
  2. 目次タブで基本機能 >> Windowsコネクティビティ >> 概念 >> LabVIEWで.NETを使用するを選択します。
  3. このツリー階層下にあるタイトルをクリックして要件や使用方法を参照します。

 

内部のCOMインターフェイスで基底クラスのメソッドが見えるのでしたら、もしかしたらLabVIEW側でラッパーVIを作成できる可能性はわずかにあると思います。ちょっと話が脱線しておりますが、参考資料へのリンクをご紹介します。

 

 

 

最後に次の段階に関するご質問ですが、ボタンの操作で任意の処理(COMインターフェイス呼び出しなど)を行いたいのでしたら、ステートマシンデザインパターンを利用する方法が適しているのではないかと思います。

簡潔に言うと、ボタン処理はイベントストラクチャを用いて、各処理をケースストラクチャで行うようにする方法です。シンプルなサンプルプログラムがございますので実際に動作を確認していただけると幸いです。サンプルの参照手順は以下のとおりです。

 

  1. ヘルプメニュー >> サンプルを検索...を選択します。
  2. 検索タブをクリックして、キーワードに ステートマシン と入力して検索します。
  3. 検索結果のリストにあるステートマシンの基礎をダブルクリックしてサンプルプログラムを開きます。

 

0 件の賞賛
メッセージ4/6
2,398件の閲覧回数

日本ナショナルインスツルメント御中 上野様

 

ご回答ありがとうございました。

可能性として、ご教示くださった方法があると分かったのは大変な収穫でしたが、

試そうにもLabVIEWの評価版のライセンスが切れてしまっており、現在は試すことができません。

評価版のライセンスを少し延長していただくとかは可能なのでしょうか。

 

以上、よろしくお願い申し上げます。

0 件の賞賛
メッセージ5/6
2,363件の閲覧回数

ユーザプロファイルの未ログインですと評価期間は7日間で、ログインすると45日間が評価期間となります。もし前者の状態でしたら、ライセンスウィザードでログインすることで延長可能です。

 

 

45日間の評価期間が切れた場合は、技術サポートにお問い合わせいただき、あとどのくらいの評価期間が必要なのかを伝えれば評価用のアクティブ化コードを発行することが可能です。

 

 

会社のPCですとお休みや出張、会議や別のお仕事もありますので、評価期間中をフル活用する時間をとるのはなかなか難しいですよね。そのため延長する方法があるのですが、コンピュータIDなどの個人情報が必要となり、Web経由ではおこなえません。電話かEメールで問い合わせいただけると幸いです。

0 件の賞賛
メッセージ6/6
2,359件の閲覧回数