2013-03-29 4 views
1

Matlab 컴파일러를 호출하기 위해이 코드를 발견했습니다.이 함수를 Matlab 명령 프롬프트에서 호출하면 올바르게 작동하지만이 함수를 .NET 어셈블리로 빌드 할 때마다 사용할 수 있습니다. 내 C# 응용 프로그램에서 몇 가지 .m 파일을 만들려면 예외가 발생합니다. 내 문제는 어디에서 생각합니까?C# 응용 프로그램 내부에서 Matlab 컴파일러를 호출하면 예외가 발생합니다.

matlab에 코드 :

function compileCode(mfile,dllName , dnetdir) 

    %% Create directories if needed 
    if (exist(dnetdir, 'dir') ~= 7) 
     mkdir(dnetdir); 
    end 

    %% Build .NET Assembly 
    eval(['mcc -N -d ''' dnetdir ''' -W ''dotnet:' dllName ',' ... 
      '' dllName ',0.0,private'' -T link:lib ''' mfile '''']); 
    end 

C# 코드 :

var cmm = new compiler.MatlabCompiler(); 
MWCharArray x = new MWCharArray(@"C:\Users\ePezhman\Documents\MATLAB\Graph2D.m"); 
MWCharArray y = new MWCharArray("Graph"); 
MWCharArray z = new MWCharArray(@"C:\Matlab\dotnet"); 
cmm.compileCode(x,y,z); 

예외 :

... MWMCR :: EvaluateFunction 오류 ... 정의되지 않은 함수 '고객 센터' 을위한 'char'유형의 인수를 입력하십시오. 줄에서 => compileCode.m 오류 9.

... matlab에 M 코드 스택 추적 ... 파일 C에서 : \ 사용자 \ ePezhman \의 AppData 지역 \ 온도 \ \ ePezhman \ mcrCache8.0 \ compil0 \ 컴파일러 \의 compileCode.m, 이름 compileCode, 라인 (9)

+0

그것은 것없이 다른 코드를 컴파일러 수있는 독립 실행 형 프로그램을 만들 수 있기 때문에, 제품에 대한 라이센스를 구입의 전체 목적을 물리 칠 것, 그것에 대해 생각 C#에서 직접 명령을 호출하는 것이 훨씬 쉽습니다. 'Process.Start()'사용하기. –

답변

1

재미있는, 나는 내가 mcc 생각 그나마 불행하게도

.. 동적으로 다른 기능을 컴파일 할 수있는 기능을 컴파일하려고하는 가정 함수 자체 컴파일/배포 가능


정확하게 말하면, MATLAB은 컴파일 타임에 호출되는 모든 함수를 알아야하고 eval을 사용하여 문자열 자체를 파싱하지 않으므로 알아낼 필요가 없기 때문입니다. 당신은

function myEval() 
    %#function foo 
    eval('...'); 
end 

(또 다른 대안은 function handles를 사용하는) .. 컴파일러에 대한 special comments를 작성하여이 특정 문제를 해결할 수 있습니다.

그래도 그렇게해도 런타임에 mcc 함수 내에서 오류가 발생합니다 : "License checkout failed, [...] Cannot find a valid license for Compiler".

이유는 설명에 언급 된 바와 같이 mcc은 개발 도구이므로 무료 MCR 런타임에만 의존하는 독립 실행 형 프로그램에는 배포 할 수 없습니다.

은 수 있다면, 당신은 컴파일러 도구 상자 :

+0

배포에 대한 언급이 없습니다. 질문은 순전히 기술적 인 것입니다. 이것은 답이 아니라 주석입니다. –

+0

@DavidHefernan : MATLAB Compiler (Builder NE)는 MATLAB 코드에서 .NET 어셈블리를 생성하는 데 사용되는 제품으로 C#에서 사용할 수 있습니다. 'mcc'는 코드를 컴파일하는 데 사용되는 명령입니다. 따라서 MATLAB 코드 (해석 언어)의 배포와 관련됩니다. – Amro

+0

예, 알고 있습니다. 문제는 코드가 실패하는 이유입니다. 'mcc'를 재배포 할 수 있는지 여부. –