LabVIEWからダイナミックリンクライブラリ(DLL)を呼び出す

更新しました Nov 10, 2020

コード/ APIをC / C ++で記述していて、LabVIEWで呼び出せるようにしたいと考えています。 Cコードでダイナミックリンクライブラリ(DLL)を作成したら、LabVIEWからDLLを呼び出すにはどうすればよいですか?

DLLを呼び出すには、最初に、ライブラリがC / C ++ DLLであるかMicrosoft.NET Assembly / .NETDLLであるかを識別する必要があります。

使用しているライブラリの種類を確認するには、DLLファイルのPortable Executable(PE)ヘッダーを確認します。

DLLはC / C ++ DLLです。

  1. ヘッダーファイル(* .h)または関数プロトタイプ定義を見つけます。ヘッダーファイルがない場合は、手順4に進みます。
  2. 呼び出したい関数を特定します。関数のパラメーターにプリミティブデータ型パラメーター(int、char、doubleなど)が含まれているかどうか、または複雑なデータ型(struct、array、vectorなど)が含まれているかどうかに注意してください。
  3. 関数に複雑なデータ型が含まれておらず、ヘッダーファイル(* .h)がある場合は、共有ライブラリのインポートウィザードを使用して、ヘッダーファイル内の関数を含むLabVIEWライブラリを作成できます。このオプションは、[ツール]»[インポート] »[共有ライブラリ(.dll)... ]にあります。ウィザードを続行します。
  1. ヘッダーファイルがない場合は、.DLLの適切なドキュメントとともにライブラリ関数ノード呼び出しを使用する必要があります。次の図は、パレット内のCall Library FunctionNodeの場所を示しています。
  1. 呼び出しライブラリ関数ノードをダブルクリックして、ノードを構成します。構成ウィンドウの[関数]タブで、DLLへのパスを入力し、呼び出す関数を選択します。
  1. 呼び出す関数に複雑なデータ型が含まれている場合は、呼び出しライブラリ関数ノードの構成ダイアログ内で関数プロトタイプを手動で定義する必要があります(DLLがタイプライブラリでコンパイルされている場合は、パラメータデータリターンタイプは自動的に定義されます)。構成ウィンドウの「パラメーター」タブにナビゲートします。ここでは、ウィンドウの下部にある関数プロトタイプがDLLの関数定義と一致するまで、パラメーターを追加し、戻り値の型を変更します。


DLLは.NETアセンブリです。

  1. LabVIEWで.NETアセンブリを使用するには、.NETパレット(接続性».NET を使用して、使用可能なすべての関数を検索します。
  2. .NETアセンブリ内でクラスをインスタンス化するには、最初にコンストラクタノードを使用します。これを行うには、コンストラクタノードをダブルクリックして[.NETコンストラクタの選択]ダイアログボックスを表示します。

  1. プロパティノードと呼び出しノードを使用して、クラス参照をコンストラクタノードからプロパティまたは呼び出しノードに配線するだけで、クラスのプロパティとメソッドにアクセスできます。これは、以下のVIスニペットに示されています。

注:このイメージはLabVIEWスニペットであり、プロジェクトで再利用できるLabVIEWコードが含まれています。スニペットを使用するには、画像を右クリックしてコンピュータに保存し、ファイルをLabVIEWダイアグラムにドラッグします。

追加情報

.NET DLLは.NETアセンブリとも呼ばれ、.NETプログラミングで役立ちます。 .NET DLLは、共通言語ランタイム(CLR)と.NET Frameworkを使用して、DLL内の機能を管理します。

複雑なデータ型がプリミティブデータ型(int、double、char)を超える構造体である場合は、Cベースの言語からラッパーDLLを作成して、関数呼び出しを簡略化できることに注意してください。

C / C ++コンストラクトはLabVIEWデータ型と常に直接相関しているわけではなく、ラッパーDLLは複雑な構造の内容を適切に抽出し、それらをプリミティブ用語に変換できます。たとえば、使用しているDLLは、char *(文字列または文字配列)を含むCの構造体を利用します。ラッパーDLLには、char *を構造体に配置して元のDLLを呼び出すchar *パラメーターを持つラッパー関数を含めることができます。 LabVIEWでは、代わりにラッパーDLL関数を呼び出すことができます。または、DLLソースコードがある場合は、構造体の代わりにchar *を受け取るようにDLLを直接変更できます。

LabVIEWサンプルファインダには、LabVIEWで外部コードを適切に呼び出す方法の完全で機能的な例があります。ヘルプを参照>>例を見つける>>外部アプリケーションとの通信