sudo_k 様
いつもお世話になっております。
日本ナショナルインスツルメンツ技術部の巳波と申します。
LabVIEWにはDLL付属のヘッダファイルを読み取ってそのDLL内の関数を呼び出すサブVIを生成する機能(メニューバーの ツール » インポート » 共有ライブラリ(.dll)...)がございますが、構造体や配列等の複雑なデータタイプが含まれている場合には手動でライブラリ関数呼び出しノードを構成して頂く必要がございます。
実際にDLLを呼び出すサンプルプログラムを下記の手順で開くことができますので、一度ご参照頂けますでしょうか。
1. メニューバーの ヘルプ » サンプルを検索 からサンプルファインダを開きます。
2. 外部アプリケーションとの通信 » 外部コードの使用 » DLLの統合 » DLLを呼び出し をダブルクリックして開きます。
3. VI を実行します。
4. データタイプを選択して「現在のデータタイプのためにサンプルVIを開く」ボタンをクリックします。構造体の場合には LabVIEWデータタイプが「クラスタ」のものをご参照ください。
構造体に配列や文字列が含まれる場合には上のスクリーンショットで選択されている「簡単クラスタ 文字列&配列」のサンプル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
*********************************************************************************