Microsoft Visual Studio プロジェクトでのダイナミック ライブラリの使用
この例では、簡単な Microsoft® Visual Studio® プロジェクトを作成および設定して、MATLAB® Coder™ により生成されたダイナミック ライブラリ (DLL) を呼び出す方法を示しています。この例では Microsoft Visual Studio 2017 を使用します。他のバージョンの Microsoft Visual Studio では手順が異なる場合があります。
C ダイナミック ライブラリの生成
MATLAB 関数
foo
を作成します。function c = foo(a) %#codegen c = sqrt(a); end
foo.m
としてローカルの書き込み可能フォルダー (たとえばC:\dll_test
) に保存します。同じコンパイラの同じバージョンを使用して、Microsoft Visual Studio プロジェクトのビルドに使用する DLL を生成します。これをしないと、リンク エラーが発生する可能性があります。
この例では、Microsoft Visual Studio 2017 コンパイラを使用します。コード ジェネレーターが使用するコンパイラを選択するには、コマンド ラインで
mex -setup
と入力します。詳細については、サポートされるコンパイラを参照してください。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 で、空のプロジェクトを作成します。
[ファイル] 、 [新規] 、 [プロジェクト] を選択します。
[インストール済み] 、 [Visual C++] 、 [全般] を選択し、[空のプロジェクト] を選択します。プロジェクト名を入力します。
[OK] をクリックします。
ライブラリを使用する main.c ファイルの作成
foo.dll
を使用する main.c
ファイルを作成します。main.c
関数は、以下の条件を満たさなければなりません。
生成されたヘッダー ファイルを含む。このファイルには、ライブラリ関数の関数プロトタイプが含まれます。
ライブラリ関数の最終呼び出し後に終了関数を呼び出す。
既定では、コード ジェネレーターは、生成された C/C++ エントリポイント関数の先頭に初期化関数の呼び出しを含めます。したがって、main.c
から初期化関数を呼び出す必要はありません。生成された初期化関数と終了関数の使用を参照してください。
ファイルを作成するには、次を行います。
[ソリューション エクスプローラー] で [ソース ファイル] フォルダーを右クリックし、[追加] 、 [新しい項目] を選択します。
[C++ ファイル (.cpp)] を選択します。[名前] フィールドに
main.c
と入力します。[追加] をクリックします。
以下のコードを入力します。
#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 で、以下を実行します。
[ビルド] 、 [構成マネージャー] を選択します。
[アクティブ ソリューション プラットフォーム] を [x64] に設定します。
64 ビット プラットフォームで 32 ビット DLL を作成する場合、32 ビットのツールチェーン定義を使用しなければなりません。64 ビット Windows® プラットフォームでの MSVC ツールチェーンを使用した 32 ビット DLL のビルドを参照してください。
外部依存関係の指定
プロジェクトをビルドする場合、コンパイラには関連付けられたヘッダー ファイルが必要です。リンカーには生成された .lib
ファイルが必要です。
[ソリューション エクスプローラー] でプロジェクトを強調表示し、[プロジェクト] 、 [プロパティ] を選択します。
コード ジェネレーターによって、ファイル
tmwtypes.h
を含むファイルrtwtypes.h
に型が生成されます。このファイルはmatlabroot\extern\include
に保存されます。ここで、matlabroot
は MATLAB インストールのルート ディレクトリです。ルート ディレクトリを返すには、コマンド ウィンドウでmatlabroot
と入力します。[構成プロパティ] 、 [C/C++] 、 [全般] で、フォルダー
C:\dll_test\codegen\dll\foo
とmatlabroot\extern\include
を [追加のインクルード ディレクトリ] に追加します。エントリはセミコロンで区切ります。[構成プロパティ] 、 [リンカー] 、 [入力] で、
foo.lib
を [追加の依存ファイル] に追加します。[構成プロパティ] 、 [リンカー] 、 [全般] で、フォルダー
C:\dll_test\codegen\dll\foo
を [追加のライブラリ ディレクトリ] に追加します。
実行可能ファイルのビルドと実行
実行可能ファイルをビルドします。[ビルド] 、 [ソリューションのビルド] を選択します。
DLL が実行可能ファイルにアクセスできるようにします。
foo.dll
を実行可能ファイルを含んでいるフォルダーにコピーするか、foo.dll
を含んでいるフォルダーをパスに追加します。実行可能ファイルを実行します。出力が予想どおりに表示されることを確認します。