ASH84

Software Engineer/Developer, co-founder of Payhere. Ex-Banksalad. Intereseted in iteroperability, bootstrap company, writting.

[C#]매틀랩과 닷넷 C# 연결하기(Connect Matlab to .NET C#)

created:2010-02-05
updated:2015-07-03
edit
매틀랩과 C 혹은 C++ 과 연결하는 방법에 대해서 이미 다른 블로거 분들이 올렸는데, 실질적으로 .NET 라이브러리화되어서 연동시켜서 매틀랩의 함수들을 사용하는 방식에 대해서는 안 나와 있어서 이렇게 올리게 되었습니다. 일단. 아래의 링크에 가셔서 기본적인 절차를 숙지 하셔야 합니다. 
[*Matlab에서 C++ DLL 만들어보세~*](http://jungbw.tistory.com/90)
**Matlab Builder NE를 이용하라!!**
**
.NET용 DLL을 만들어서 C#과 연결하기 위해서는 아래화면에서 Matlab Compiler가 아니라 Matlab Builder NE를 사용해야만 만들수 있습니다. 그래서 Matlab Builder NE를 누르시면 아래와 같은 화면이 뜨게 됩니다. 
**
![](http://ash84.net/wp-content/uploads/1/cfile3.uf.12057D024B6B6FC17B14F3.png)
matalb deploytool
이 화면에서 **.Net Component**를 누르시고 진행하시면 됩니다. 진행후에는 만들려고 했던 매틀랩의 Function이 dll화 되어서 나오게 되고 **distrib**** src** 두 폴더로 나뉘어서 제공이 됩니다. 
**Dll 참조추가후, 어떻게 사용해야하는거지?**
**
단순히 dll을 참조추가해서 쓰려면 distribi 폴더 안에 “이름.dll” 파일을 사용하면됩니다. dll 파일외에 “이름Native.dll”도 있는데 신경쓰지 말고 dll 파일만 참조추가 하면 됩니다. 
![](http://ash84.net/wp-content/uploads/1/cfile25.uf.14074C124B6B71E160F3F7.png)
참조추가후 wd 라는 객체를 만들어서 whoisest 이라는 함수를 불러오는 과정을 위의 그림에서 볼수가 있습니다. 근데 이상한 점이 있죠? MWArray라는 것은 무엇일까요?
**
매틀랩을 연동했다고 해서, 일단 C#에서 쓰는 자료형으로 매틀랩의 함수에 데이터를 전달해 줄수있는것이 아닙니다. 물론 자신이 만든 매틀랩 함수는 가능하지만, 그 외의 필터 등의 매틀랩에 있는 함수를 사용할때는** MWArray** 를 사용해야 하는 경우가 있습니다. 
** **
**MWArray를 쓰려면?**
**
**MWArray를 사용하기 위해서는 매틀랩이 깔려 있거나 혹은 Matlab Compiler를 설치하셔야만 합니다. ** 
![](http://ash84.net/wp-content/uploads/1/cfile5.uf.1961A5124B6BE7E3283EB8.png)
MathWorks .NET MwArrayAPI
**
**위의 파일을 참조추가 한후에는, MWArray 클래스를 이용해서 데이터를 매틀랩 함수로 전달 할 수 있습니다. 하지만, MwArray 자체를 객체로 만들어서 보낼수는 없습니다. 즉, 하위 클래스를 이용해야 한다는 것이죠. **
** **
예제 코드를 볼까요?
 publicMWArray[] Mathlab_Detcoef(double[] cxd, int[] lxd, int p)
 {
            MWNumericArray ccxd_mwn = newMWNumericArray(cxd.Length, 1, cxd);
            MWNumericArray iixd_mwn = newMWNumericArray(lxd.Length, 1, lxd);
            MWArray[] result = wd.detcoef(1, ccxd_mwn, iixd_mwn, p);
            return result;
  }
위의 코드를 보면, **MWNumericArray**를 통해서 double형 배열과 int형 배열을 각각 매틀랩에 알맞는 형식으로 변환해 주고 있습니다. c#에서의 배열을 그대로 쓰기에는 매틀랩 함수에는 무리가 있기때문에 위와 같이 처리한 것입니다. 그리고 detcoef 함수를 호출하기 위해서 MWNumericArray 객체 두개를 각각 인자로 넣어주고 MWArray 배열 형식으로 받아와서 처리하고 있습니다. 
참조추가를 한 후에는, MWNumericArray 이외의 MWCellArray, MWCharArray 등의 다양한 형태의 Array를 사용할수 있으니 한번 찾아 보시길 바랍니다. 
[](http://ash84.net/wp-content/uploads/1/cfile4.uf.142F401E4C6A082BA4AD03.zip)cfile4.uf.142F401E4C6A082BA4AD03.zip
**참고 사항**
C#으로 매틀랩을 가져오긴 했지만, 매틀랩에서는 인덱스가 0 이 아닌 1부터 시작한다는 것을 반드시 명심하시기 바랍니다. 또한, 1차원 배열도 2차원 형식으로 표현해야 하는 경우가 있으니 유념하시기 바랍니다. 

#.net dll matlab  #c#  #Connect matlab to c#  #dev  #Matlab  #매틀랩  #매틀랩과 c# 연동하기