2011-06-21 18 views
14

私のC++プロジェクトでMATLAB関数を呼び出したいと思います。私が最初に私は、単純なMATLAB関数を作成2010C++からMatlab関数を呼び出す方法

MatlabのR2010aおよびVisual Studioを使用してい

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

をして、私はMATLABのGUIのコンパイラを使用してこの機能をコンパイルするためにMatlabのコンパイラを使用([ファイル] - >新規 - >デプロイメントプロジェクトを選択し、C++共有ライブラリを選択します)。このファイルは、2つのフォルダー(distribとsrc)を生成します。

DISTRIBは含まれています:

  • がfoo.h
  • foo.lib
  • srcが含まれてい

    1. foo.dll:

      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コンパイラを使用しているまたはVisual Studioの古いバージョンで動作します。

      だから誰でも助けてくれますか?

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

    答えて

    3

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

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

    これらのファイルをプロジェクトフォルダの外に保存したり、これらのファイルを他のアプリケーションで再利用したりする場合は、VC++ Directories, Projects and Solutionsにお読みください。

    を編集する:おそらく、MATLABライブラリをインクルードパスとライブラリパスに追加する必要があります。 Why do I receive the error 'Could not find include file "mclmcrrt.h"' when trying to compile a stand-alone application?

    +0

    私は、ヘッダファイルにのみがfoo.hを追加し、私はメインを作成しました.cppファイルと私はfoo.hを含むと私はプロジェクトのプロパティを開いて、私はリンカーに行くと私は追加の依存関係foo.libを追加 とプロジェクトをビルドするとき、この2つのソースファイル #include "mclmcrrt.h" #include "mclcppclass.h" foo.hにあります 助けてもらえますか? –

    11

    MathWorksサポートソリューションをチェックしてください。遅すぎるかもしれないが将来的かもしれません。

    を含むfoo.h

    追加C/C++ - 一般的な追加ディレクトリを含める matlabヘッダー(C:\Program Files (x86)\MATLAB\R2009b\extern\include)への道。

    は、追加の依存にリンカについてfoo.libmclmcrrt.libmclcommain.libを追加します。 追加のライブラリディレクトリリンカについては

    は、あなたのMathWorks社のMATLAB LIBS((MATLABとVSのバージョンが同じでなければなりません。私は二Matlabの32bit版をインストールする必要がありました。)版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; 
    
    +1

    未来はありがとう! – Spencer

    関連する問題