LabVIEW からどのようにDLLを呼び出しますか
ハードウェア: PXI/CompactPCI>>Controllers
問題: LabVIEW からどのようにDLLを呼び出しますか。
解決策:
- Dynamic Link Library (DLL) を LabVIEW から呼び出すにはヘルプ内の Calling Code Written in Text-Based Programming Languages の項目を参照してください。 このヘルプにはより詳細な情報が記載されています。DLL を呼び出すには DLL のタイプを識別しなくてはなりません。 DLL のタイプには C / C++ の DLL と Microsoft .NET assembly とがあります。 C / C++ DLL は C, C++ から生成されており、他のJava, Fortran, または Visual Basic 6.0 といったプログラミング言語 ( .NET languages を除く) もこの部類になります。.NET DLL は .NET assembly や単に アセンブリ とも呼ばれます。これは他の DLL と同じ方法では動作しないために異なった技術用語で呼ばれます。 .NET DLL は Common Language Runtime (CLR) を使用し、 DLLに含まれる.NET Framework の関数を用いることができます。
DLL が C / C++ DLLの場合は下記の手順に従ってください。
- ヘッダファイル (*.h) もしくは関数プロトタイプの definition (定義) を探します。
- 呼び出したい関数を識別します。この時に関数のパラメータが int, char, double, といったような基本データタイプなのか、構造体や配列、ベクトルといった複数 データタイプなのかを知る必要があります。
- 関数が 複数 データタイプを含んでおらず、ヘッダファイル (*.h) をお持ちの場合、LabVIEW 内の DLL をインポート の機能を使うことができます。またDLL のためのライブラリも作成されます。この機能は ツール≫インポート≫共有ライブラリ(.dll) から立ち上がるウィザードに従って進むことができます。
- もし 複数データタイプを含まず、ヘッダファイル (*.h) がない場合、C や C++ などのプログラミング環境で DLL に添ってヘッダファイルを作成する必要があります。 C や C++ DLL の場合、DLL で呼び出される関数のパラメータを関数情報のドキュメントなどから識別する必要があります。一旦、パラメータを識別した後、ライブラリ関数呼び出しノード を用いて LabVIEW 内で手動で関数の呼び出し設定をします。
呼び出したい関数が 複数 データタイプを含んでいる場合、ライブラリ関数呼び出しノード を用いて LabVIEW 内で手動で関数の呼び出し設定をします。設定ダイアログの中で関数プロトタイプを設定します。もし DLL がタイプライブラリやパラメータデータと合わさってコンパイルされている場合、パラメータデータと返り値のタイプが自動的に定義されます。複数 データタイプが基本関数以外も含めた構造体の場合、c言語ベースでラッパー DLL を作成する方法が最適です。
C / C++ の構造体ではLabVIEWで直接的にデータを渡すことは必ずしも容易ではありません。ラッパー DLL を用いることで複数データの構造体を基本関数のように近似することができます。
メモ:LabVIEWのサンプルファインダにライブラリ関数呼び出しノードを使用して異なるデータタイプのハンドルの仕方を説明するわかりやすいサンプルがあります。Call DLL.viと呼ばれるサンプルです。複数のデータタイプを扱う、配列や構造体を使用するときに参考にしてください。このサンプルはヘルプ ≫ サンプルを検索よりLabVIEWサンプルファインダを開き、ディレクトリ別のラジオボタンを選択してください。このディレクトリの中で、 dll ≫ data passing ≫ Call Native Code.llbと選択するとCall DLL.viのサンプルを開くことができます。 このVIの各データタイプを見るためには、VIを実行してからデータタイプのリストからデータタイプを選択してください。「現在のデータタイプのためにサンプルVIを開く」を選択すると、新たなブロックダイアグラムが立ち上がり、ライブラリ関数呼び出しノードの使用方法が表示されます。
DLLが.NETアセンブルの場合は下記の手順に従ってください。
- LabVIEWで.NETアセンブリを使用するためには、.NETパレットに関数を使用してください。
(コネクティビティ ≫ .NET)
- コンストラクタノードを使用して、.NETアセンブリ内にインスタンスを作成してください
- コンストラクタノードからのリファレンスの配線をプロパティノード、インボークノードにつないで、クラスのプロパティやメソッドにアクセスします
関連リンク: KnowledgeBase 281A5HQO: Call Library Function Returns the Wrong Function Prototype and Function Parameters for DLLsKnowledgeBase 1NM99D6Q: External Code for LabVIEW - CIN/DLL - Starting PointLabVIEW 8.6 Help: Calling external APIsLabVIEW 2009 Help: Calling Code Written in Text- Based Programming LanguagesDeveloper Zone Example: Writing a Wrapper Function for an External Code Function
添付:
報告日時: 07/20/2007
最終更新日: 12/13/2012
ドキュメントID: 4BJGH6GJ
Other Support Options
Ask the NI Community
Collaborate with other users in our discussion forums
Request Support from an Engineer
A valid service agreement may be required, and support options vary by country.