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製品ディスカッション

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

LabVIEW2010におけるDLL関数の読み込みについて

 

sudo_kと申します,お世話になっております.

LabVIEWにて,ライブラリ関数呼び出しノードを用いてDLL内の関数をviで実現しています. 

 

添付PDFには構造体を含むヘッダファイルとDLL関数の説明が載っています.

この中でDLL内の関数の一部は,ヘッダで定義された構造体の変数に代入等を行っています(例えば添付したPDF内のPage16,AOS_InitializeのOutgoing項など参照).

こういった関数はヘッダがないと完全に動作できないと考えているのですが,ヘッダを読み込む必要のあるDLLはどう扱えばよいのでしょうか.

LabVIEWでこれらの関数をviで実現するにあたって,何を行えばよいか教えてくださると幸いです.

よろしくお願いします.

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

sudo_k 様

 

いつもお世話になっております。

日本ナショナルインスツルメンツ技術部の巳波と申します。

 

LabVIEWにはDLL付属のヘッダファイルを読み取ってそのDLL内の関数を呼び出すサブVIを生成する機能(メニューバーの ツール » インポート » 共有ライブラリ(.dll)...)がございますが、構造体や配列等の複雑なデータタイプが含まれている場合には手動でライブラリ関数呼び出しノードを構成して頂く必要がございます。

 

実際にDLLを呼び出すサンプルプログラムを下記の手順で開くことができますので、一度ご参照頂けますでしょうか。

 

1. メニューバーの ヘルプ » サンプルを検索 からサンプルファインダを開きます。

2. 外部アプリケーションとの通信  » 外部コードの使用 » DLLの統合 » DLLを呼び出し をダブルクリックして開きます。

3. VI を実行します。

4. データタイプを選択して「現在のデータタイプのためにサンプルVIを開く」ボタンをクリックします。構造体の場合には LabVIEWデータタイプが「クラスタ」のものをご参照ください。

 

DLLを呼び出し.png

 

 

 

構造体に配列や文字列が含まれる場合には上のスクリーンショットで選択されている「簡単クラスタ 文字列&配列」のサンプルVIをご参照ください。

 

LabVIEWの配列や文字列はクラスタ内でハンドルとして格納されておりますので、DLLでの構造体とマッチさせるために変換を行っています。

 

LabVIEWのクラスタの構造の詳細につきましては、LabVIEWヘルプの 基本機能 » LabVIEWでメモリにデータを保存する方法 で説明されております。

英語版であれば下記のURLにて公開されております。

 

How LabVIEW Stores Data in Memory

http://zone.ni.com/reference/en-XX/help/371361G-01/lvconcepts/how_labview_stores_data_in_memory/

 

DLLの構造体をLabVIEWのクラスタと読み取る際に起こりうる問題としまして、各要素のアラインメント(パッキング)のずれがございます。

この問題の詳細につきましては下記の技術資料に書かれております。

 

LabVIEW のクラスタは VC++ のストラクチャとアラインメントが異なるのはなぜですか?

http://digital.ni.com/public.nsf/allkb/392BF92EFD71C0CA862573DE00044555

 

回避する方法としまして、「1バイトでないパッキングのクラスタ」のデータタイプのサンプルVIをご参照ください。

 

宜しくお願い致します。

*********************************************************************************
日本ナショナルインスツルメンツ株式会社 技術部 巳波裕介
Yusuke Minami, Applications Engineering, National Instruments Japan
技術サポートウェブページ: http://www.ni.com/support/ja
お問い合わせフリーダイヤル: 0120-527196
*********************************************************************************
メッセージ2/2
4,051件の閲覧回数