From Saturday, Nov 23rd 7:00 PM CST - Sunday, Nov 24th 7:45 AM CST, ni.com will undergo system upgrades that may result in temporary service interruption.

We appreciate your patience as we improve our online experience.



ライブラリ関数呼び出しノードにおいて「タイプに適応」はどのように使用するのですか?



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

問題:
ライブラリ関数呼び出しノードのパラメータタイプにある「タイプに適応」とは何ですか?どのように使用すれば良いですか?


解決策:
「タイプに適応」は、DLLにクラスタ(C言語の構造体)のような複雑なデータ構造を渡すことができます。「タイプに適応」は、関数の引数でのみ使用可能です。返り値には使用できず、返り値のタイプには文字列と数値データタイプのみが利用可能です。

タイプに適応を使用する方法は、以下のとおりです。
  1. ブロックダイアグラムにライブラリ関数呼び出しノードを配置します。

  2. ライブラリ関数呼び出しノードを右クリックして、構成...を選択します。

  3. 使用したい適切なDLLと関数を選択します。単純にCデータタイプを問い合わせているとして扱う場合、この手順をスキップすることができます。

  4. パラメータタブでパラメータを追加(+)ボタンをクリックします。

  5. タイプの項目でタイプに適応を選択します。

  6. 下図に示すように、クラスタをライブラリ関数呼び出しノードの入力端子に配線することが可能です。



複雑なデータタイプをCに渡す場合、LabVIEWには、関数のプロトタイプおよび構造体宣言を自動生成するビルドインの機能があります。クラスタをライブラリ関数呼び出しノードを配線した後、ライブラリ関数呼び出しノードを右クリックしてCファイルを作成を選択します。ファイルを保存します。このCファイルはC/C++開発環境やメモ帳で開くことができます。上記のサンプルコードは、以下のCコードを生成されます。

/* Call Library Source File */

#include "extcode.h"

/* Typedefs */
typedef struct {
int32 dimSize;
int32 elt[1];
} TD2;
typedef TD2 **TD2Hdl;

typedef struct {
int32 Numeric;
TD2Hdl Array;
int32 Numeric2;
} TD1;

void funcName(TD1 *arg1);

void funcName(TD1 *arg1)
{

/* Insert Code Here */

}


このコードは、LabVIEWクラスタがC/C++構造体のインタフェースになるように適切なデータタイプを作成します。DLLをビルドする際、C/C++プロジェクトでextcode.h、fundtypes.h、およびplatdefines.hをインクルードする必要があります。これらのヘッダファイルは、C:\Program Files\National Instruments\LabVIEW xxxx\cintoolsディレクトリに保存されています。ここで、xxxxはLabVIEWのバージョン番号となります。以下の構文を使用してLabVIEWクラスタの各要素にアクセスすることができます。

arg1->Numeric = 5;

注意点として、LabVIEWはDLLにハンドルを渡していますが、このハンドルはポインタのポインタです。

LabVIEW 7.1以前での詳細については、マニュアル『Using External Code in LabVIEW』を参照してください。LabVIEW 8.0以降では、LabVIEWヘルプの『Configuring the Call Library Function Node』のトピックを参照してください。


関連リンク:
製品マニュアル: Using External Code in LabVIEW
LabVIEWヘルプ: Configuring the Call Library Function Node

添付:





報告日時: 01/24/2003
最終更新日: 12/22/2016
ドキュメントID: 2TNBMIHM