Main Content

Microsoft Visual Studio プロジェクトでのダイナミック ライブラリの使用

この例では、簡単な Microsoft® Visual Studio® プロジェクトを作成および設定して、MATLAB® Coder™ により生成されたダイナミック ライブラリ (DLL) を呼び出す方法を示しています。この例では Microsoft Visual Studio 2017 を使用します。他のバージョンの Microsoft Visual Studio では手順が異なる場合があります。

C ダイナミック ライブラリの生成

  1. MATLAB 関数 foo を作成します。

    function c = foo(a) 
    %#codegen
      c = sqrt(a);
    end
    
  2. foo.m としてローカルの書き込み可能フォルダー (たとえば C:\dll_test) に保存します。

  3. 同じコンパイラの同じバージョンを使用して、Microsoft Visual Studio プロジェクトのビルドに使用する DLL を生成します。これをしないと、リンク エラーが発生する可能性があります。

    この例では、Microsoft Visual Studio 2017 コンパイラを使用します。コード ジェネレーターが使用するコンパイラを選択するには、コマンド ラインで mex -setup と入力します。詳細については、サポートされるコンパイラを参照してください。

  4. MATLAB 関数 foo の DLL を生成します。-args オプションは、入力 a が実数の double であることを指定します。

    codegen -config:dll foo -args {0} -report

    Microsoft Windows® システムで、codegen は C ダイナミック ライブラリ foo.dll およびサポート ファイルを、既定のフォルダー C:\dll_test\codegen\dll\foo 内に生成します。

Microsoft Visual Studio プロジェクトの作成

Microsoft Visual Studio で、空のプロジェクトを作成します。

  1. [ファイル][新規][プロジェクト] を選択します。

  2. [インストール済み][Visual C++][全般] を選択し、[空のプロジェクト] を選択します。プロジェクト名を入力します。

  3. [OK] をクリックします。

ライブラリを使用する main.c ファイルの作成

foo.dll を使用する main.c ファイルを作成します。main.c 関数は、以下の条件を満たさなければなりません。

  • 生成されたヘッダー ファイルを含む。このファイルには、ライブラリ関数の関数プロトタイプが含まれます。

  • ライブラリ関数の最終呼び出し後に終了関数を呼び出す。

既定では、コード ジェネレーターは、生成された C/C++ エントリポイント関数の先頭に初期化関数の呼び出しを含めます。したがって、main.c から初期化関数を呼び出す必要はありません。生成された初期化関数と終了関数の使用を参照してください。

ファイルを作成するには、次を行います。

  1. [ソリューション エクスプローラー][ソース ファイル] フォルダーを右クリックし、[追加][新しい項目] を選択します。

  2. [C++ ファイル (.cpp)] を選択します。[名前] フィールドに main.c と入力します。

  3. [追加] をクリックします。

  4. 以下のコードを入力します。

    #include "foo.h"
    #include "foo_terminate.h"
    #include <stdio.h>
    
    int main()
    {
      printf("%f\n", foo(26));
      foo_terminate();
      getchar();
      return 0;
    }

プラットフォームの設定

MATLAB Coder では、64 ビット DLL を作成するために設定されたツールチェーンが自動的に使用されます。既定では、Microsoft Visual Studio は Win32 プラットフォーム向けに作成するように設定されています。生成された 64 ビット DLL と一致させるために、ビルド プラットフォームを x64 に変更しなければなりません。Microsoft Visual Studio で、以下を実行します。

  1. [ビルド][構成マネージャー] を選択します。

  2. [アクティブ ソリューション プラットフォーム][x64] に設定します。

64 ビット プラットフォームで 32 ビット DLL を作成する場合、32 ビットのツールチェーン定義を使用しなければなりません。64 ビット Windows® プラットフォームでの MSVC ツールチェーンを使用した 32 ビット DLL のビルドを参照してください。

外部依存関係の指定

プロジェクトをビルドする場合、コンパイラには関連付けられたヘッダー ファイルが必要です。リンカーには生成された .lib ファイルが必要です。

  1. [ソリューション エクスプローラー] でプロジェクトを強調表示し、[プロジェクト][プロパティ] を選択します。

  2. コード ジェネレーターによって、ファイル tmwtypes.h を含むファイル rtwtypes.h に型が生成されます。このファイルは matlabroot\extern\include に保存されます。ここで、matlabroot は MATLAB インストールのルート ディレクトリです。ルート ディレクトリを返すには、コマンド ウィンドウで matlabroot と入力します。

    [構成プロパティ][C/C++][全般] で、フォルダー C:\dll_test\codegen\dll\foomatlabroot\extern\include[追加のインクルード ディレクトリ] に追加します。エントリはセミコロンで区切ります。

  3. [構成プロパティ][リンカー][入力] で、foo.lib[追加の依存ファイル] に追加します。

  4. [構成プロパティ][リンカー][全般] で、フォルダー C:\dll_test\codegen\dll\foo[追加のライブラリ ディレクトリ] に追加します。

実行可能ファイルのビルドと実行

  1. 実行可能ファイルをビルドします。[ビルド][ソリューションのビルド] を選択します。

  2. DLL が実行可能ファイルにアクセスできるようにします。foo.dll を実行可能ファイルを含んでいるフォルダーにコピーするか、foo.dll を含んでいるフォルダーをパスに追加します。

  3. 実行可能ファイルを実行します。出力が予想どおりに表示されることを確認します。

関連するトピック