15

C++ プロジェクトで MATLAB 関数を呼び出したいと考えています。

Matlab R2010a と Visual Studio 2010 を使用しています

最初に、単純な matlab 関数を作成しました。

function y = foo(x)
    y = x+1;

次に、matlab コンパイラを使用して、matlab GUI コンパイラを使用してこの関数をコンパイルしました ([ファイル] -> [新規] -> [配置プロジェクト] を選択し、[C++ 共有ライブラリ] を選択します)。このファイルには、distrib と src の 2 つのフォルダーが作成されます。

配布には以下が含まれます:

  1. foo.dll
  2. foo.h
  3. foo.lib

src には以下が含まれます:

  1. foo.cpp
  2. foo.dll
  3. foo.exp
  4. foo.exports
  5. foo.h
  6. foo.lib
  7. foo_mcc_component_data.c

このファイルを C++ アプリケーションで使用したいと考えています。何度も試しましたが、方法が見つかりませんでした。インターネットで見つけたすべての方法は、異なるファイルを生成するか、古いバージョンのビジュアルスタジオで動作する古いmatlabコンパイラを使用しています。

誰か私を助けてくれませんか?

どうすればいいですか?どのファイル/参照をどこに追加する必要がありますか? どのパスを定義する必要がありますか?

4

2 に答える 2

12

手遅れかもしれませんが、将来のために。

を含めますfoo.h

C/C++-General-Additional インクルード ディレクトリを matlab ヘッダーに追加します ( ) C:\Program Files (x86)\MATLAB\R2009b\extern\include

Add foo.libmclmcrrt.libおよびmclcommain.libfor Linker を追加の依存関係に追加します。

追加のライブラリ ディレクトリのリンカーについては、matlab ライブラリへの道を示します ( 32 ビット版の場合 (matlab と VS のバージョンは同じである必要があります。2 番目の Matlab 32 ビット バージョンをインストールする必要がありました。))。C:\Program Files (x86)\MATLAB\R2009b\extern\lib\win32\microsoft

foo.libシステムパスにへの道を追加しました。

ライブラリを使用する前にfoo.dll、MCR とライブラリ関数を初期化する必要があります。

mclInitializeApplication(NULL,0);
fooInitialize(); 

使用後は次のことを忘れないでください。

mclTerminateApplication();
fooTerminate();

そして、いくつかのデモコードは次のようになります:

int num = 1;
double numbrIn = 1.5;
std::cout<<"now we have " << numbrIn << std::endl;
mwArray array_in(num, 1, mxDOUBLE_CLASS, mxREAL);
array_in.SetData(&numbrIn,num);
mwArray array_out;
foo(1, array_out, array_in);
array_out.GetData(&numbrIn, num);
std::cout<<"now we have " << numbrIn << std::endl;
于 2012-05-04T04:41:04.357 に答える
3

これらのファイルはfoo.hfoo.libアプリケーションをコンパイルするために必要です。このfoo.dllファイルは、通常は同じディレクトリにある、結果のアプリケーションと共に出荷する必要があります。

foo.hファイルをソース ファイルと同じディレクトリに配置する場合、特別なことを行う必要はありません#include "foo.h"foo.lib外部リンカーの依存関係に直接パスを追加することもできます。

これらのファイルをプロジェクト フォルダーの外に保存したり、これらのファイルを他のアプリケーションで再利用したりしたい場合は、VC++ ディレクトリ、プロジェクト、ソリューション を参照してください。

編集: おそらく MATLAB ライブラリをインクルードおよびライブラリ パスに追加する必要もあります。MathWorks サポート ソリューションを確認してくださいスタンドアロン アプリケーションをコンパイルしようとすると、「インクルード ファイル "mclmcrrt.h" が見つかりませんでした」というエラーが表示されるのはなぜですか?

于 2011-06-21T17:18:29.153 に答える