This content is not available in your preferred language.

The content is shown in another available language. Your browser may include features that can help translate the text.

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

更新しました Nov 8, 2020

環境

ソフトウェア

  • LabVIEW

プログラミング言語

  • C++
  • C
  • C# .NET

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

DLLを呼び出すには、まずライブラリがC/C ++ DLLかMicrosoft .NETアセンブリかどうかを確認する必要があります。 .NET DLLは.NETアセンブリとも呼ばれ、.NETプログラミングに役立ちます。.NET DLLは、共通言語ランタイム(CLR)と.NET Frameworkを使用してDLL内の関数を管理します。


 

DLLがC/C++ DLLの場合:

  1. ヘッダーファイル(*.h)または関数のプロトタイプ定義を検索します。
  2. 呼び出したい関数を特定します。関数のパラメータに、int、char、doubleなどのプリミティブデータ型パラメータが含まれているか、構造体、配列、またはベクトルなどの複雑なデータ型が含まれているかどうかを確認します。
  3. 関数に複雑なデータ型がなく、ヘッダファイル(*.h)がある場合は、共有ライブラリのインポートウィザードを使用して、ヘッダファイルに関数を含むLabVIEWライブラリを作成できます。ツール>>インポート>>共有ライブラリ(.dll)でこのオプションを見つけることができます。ウィザードを進めると以下のような画面になります。

 
  1. ヘッダーファイルがない場合は、ライブラリ関数呼び出しノードを.DLLの適切なドキュメントと共に使用する必要があります。下図は、パレット内でライブラリ関数呼び出しノードの位置を示しています。

 
  1. ダイアグラムに配置したライブラリ関数呼び出しノードをダブルクリックして、ノードを構成します。設定ウィンドウの関数タブでDLLへのパスを入力し、呼び出す関数を選択します。 

 
  1. 呼び出したい関数に複雑なデータ型が含まれている場合は、ライブラリ関数呼び出しノードの設定ダイアログ内で関数プロトタイプを手動で定義する必要があります(DLLがタイプライブラリでコンパイルされている場合、パラメータデータや戻り値の型は自動的に定義されます)。設定ウィンドウのパラメータタブに移動します。ここでは、ウィンドウの下部にある関数プロトタイプがDLLの関数定義と一致するまで、パラメータを追加して戻り値の型を変更します。




 

DLLが.NETアセンブリの場合:

  1. LabVIEWで.NETアセンブリを使用するには、.NETパレット(接続(もしくはコネクティビティ)>>.NET)にある関数を使用して、使用可能なすべての関数を探します。
  2. まず、.NETアセンブリ内でクラスをインスタンス化するためにコンストラクタノードを使用します。これは、コンストラクタノードをダブルクリックして、「.NETコンストラクタを選択」ダイアログボックスを表示することで選択できるようになります。 

 
  1. プロパテノードィとインボーグノードを使用します。コンストラクタノードからプロパティノードやインボーグノードに配線するだけでクラスのプロパティやメソッドにアクセスして使用することができます。

Additional Information

複雑なデータ型がプリミティブなデータ型(int、double、char)以上の構造体である場合は、Cベースの言語からラッパーDLLを作成して関数呼び出しを簡略化することができます。 C/C++の構造はLabVIEWのデータ型と直接相関するとは限りません。ラッパーDLLは複雑な構造の内容を適切に抽出し、原始的な用語に変換することができます。たとえば、使用しているDLLは、char*(文字列または文字配列)を含むCの構造体を利用します。ラッパーDLLには、構造体にchar*を配置し、次に元のDLLを呼び出すachar*パラメーターを含むラッパー関数を含めることができます。LabVIEWでは、代わりにラッパーDLL関数を呼び出すことができます。DLLのソースコードをお持ちの場合は、structの代わりにchar*を取り込むようにDLLを直接変更することもできます。

LabVIEWサンプルファインダには、LabVIEWで外部コードを正しく呼び出す方法の完全かつ機能的なサンプルプログラムがあります。 ヘルプ>>サンプルを検索...>>外部アプリケーションとの通信を参照してください。