2017-06-22 11 views
0

私がやっていることは、MATLAB-Compiler dll/libを新しいC++プロジェクトに統合することです。デバッグ中にのみmatlab-compiler dll/libをC++で初期化する際のアクセス違反

私はこの指示に従いました:How do I integrate my C++ shared Library generated from MATLABこれはうまく機能しています(ビルドエラーとインテリセンスはうまくいきませんので、すべての必要な情報がそこにあります)。

function output = extest(arg1,arg2) 
    output = arg1+arg2; 
end 

とMATLAB関数に対する "デフォルト" のC++コード:

#include "extest.h" 
#include <cstdlib> 
#include <stdio.h> 

int main(int argc, char** argv){ 

    mclmcrInitialize(); 
    if (!mclInitializeApplication(NULL,0)){ 

     std::cerr << "could not initialize the application properly" << std::endl; 
     return -1; 
    } 
     if(!extestInitialize()){ 
      std::cerr << "could not initialize the library properly" << std::endl; 
      return -1; 
     } 
     else{ 
      try{ 

       //code itself (not jet reached therefore removed) 

      }catch(const mwException& e){ 
       std::cerr << e.what() << std::endl; 
       return -2; 
      } 
      catch(...){ 
       std::cerr << "Unexpected error thrown" << std::endl; 
       return -3; 
      } 
      extestTerminate(); 
     } 
     mclTerminateApplication(); 
     return 0; 
} 

デバッガ後の電子しばらくすると、私はテストのための非常にシンプルなmathlabコード/機能を使用してい

if(!extestInitialize())を実行しようとすると、次のエラーがスローされます。 DllTestingCpp.exeに0x000002BF72E0EE55で投げ

例外:0xc0000005で:アクセス違反読み取り場所0x0000000000000008。

enter image description here

私は視覚的なスタジオにcontinue >ボタンを押すと、それが継続された後、その上に20倍のクリックを言うことができますすることができます。 ctrl + F5(デバッグなし)でコードを開始すると、すべてがうまくいきます。

これがデバッグモードで発生する理由は何ですか?または、このエラーをどのように取り除くことができますか?

PS:extestは私のlibに名前とMATLAB R2017a 64ビットおよびVisual Studio 2017(x64のとデバッグ)、

+0

ことによってそれを修正しました。見て[ここ](https://stackoverflow.com/questions/44680338/exception-when-initialize-dll-in-c-sharp-generated-by-matlab-compiler/44680616#44680616)。 matlabでjitを無効にしてみてください。ここにいくつかのリンクがあります。 [link1](https://uk.mathworks.com/matlabcentral/answers/79738-calling-new-on-matlab-generated-class-from-dot-net-crushes-the-app-m_interpreter-dll)、[ link2](https://uk.mathworks.com/matlabcentral/answers/293615-mcr_r2013a_win64-net-framework-4-5-2)。私はどのように関連しているかわからない..でも –

+0

こんにちは、それは非常によく似ているが、私はどのようにCの中でソリューションを使用するのか分からない+ + – user1234

+0

matlabコンパイラを起動すると、これは、C#for C++用にコンパイルした場合には依存しません。 –

答えて

0

を使用している私にとっては同じ問題(Matlab2017 + VS 2015)。 おそらく、MATLABで使用されるJavaとの競合があります。

私は `.net`アセンブリを展開した後、同様のエラーを得ていた

const char *args[] = {"-nojvm"}; 
const int count = sizeof(args)/sizeof(args[0]); 
mclInitializeApplication(args, count)) 

代わりの

mclInitializeApplication(NULL,0) 
+0

あなたはMatlabのUIを失うでしょう(C++から呼び出すときに本当に必要ですか?)とにかく、アクセス違反 –

関連する問題