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.



ある特定の計測器や機器などを制御するために作成されたDLLが、ポインタを含んだ構造体を使用している場合に、このDLLをLabVIEWまたはCVIで使用することはできますか



使用ソフトウェア: LabVIEW Development Systems
使用ソフトウェア・バージョン: N/A
使用ソフトウェア・バージョンに特化: N/A
二次のソフトウェア: N/A

問題: LabVIEWを使用し計測器を制御しようと考えていますが、制御をするのに必要なDLLファイルが、ポインタを含んだ構造体を使用しています。このDLLをLabVIEWまたはCVIで使用することができるのですか? 

解決策:
ある特定の計測器や機器を制御するために作成されたDLLがあります。この構造体は、内部でポインタを要求する構成になっております。 この場合、一般的には、Call Library Functionを使用しデータの受け渡しを行います。 

もし、構造体の内部のデータが平坦化されたものである場合には、LabVIEWのクラスタを構造体の替わりとして使い、さらにそれぞれのクラスタにType Castを使用してByte Arrayに変換し、それを配列データポインタ内に受け渡しをすることができます。詳細に関しましては、LabVIEWサンプルプログラムのCall DLLの中の「簡易クラスタ 文字列&配列」をご参照下さい。

もし、構造体内の配列が、ある特定のサイズである場合には、特定の数の要素が含まれる内蔵クラスタを使用することができます。( ETHTransmit.llb Commlib.zipの中のETHTransmit.llbを参照) 下記に任意のサイズの配列が含まれるデータストラクチャのある一例をご紹介いたします。

(例)typedef struct { int Configuration; int Range; int Offset; int* Data; int DataCount; } HTVFDStructure;

また、多少複雑になってしまいますが、配列(int* Data)のアドレスを含むクラスタを作成する方法があります。 通常、DLLはC言語でLabVIEWの配列をどのように扱うか考慮せずに作成されているため、単純にCall Library Functionを使用し、データの受け渡しを行うことができません。

この際、ラッパーDLLをある特定の関数に使用するために作成する必要が出てきます。 ラッパーには2種類の方法があり、LabVIEWからクラスタ情報をラッパーに受け渡し、ラッパー内でそれを変換する方法、もしくは、個別のデータをLabVIEWからラッパーに受け渡し、ラッパー内で、必要な構造体の形態に変換する方法があります。 詳細に関しましては、下記のサンプルプログラムご参照していただければと思います。

また、下記のサンプルプログラムに加え、通常のLabVIEWサンプルプログラム集の、Call DLLも合わせてご参照下さい。

関連リンク:

添付:


mydll.zip - mydll.zippassing.zip - passing.zip


報告日時: 06/06/2001
最終更新日: 08/06/2004
ドキュメントID: 2A5F7J5C