Main Content

C Matrix API를 사용하여 C++ MEX 함수 생성하기

참고

MATLAB®은 최신 C++ 의미 체계와 설계 패턴을 사용하는 API, 즉 C++용 MATLAB Data API를 제공합니다. MathWorks는 이 API를 사용하여 MEX 함수를 생성할 것을 권장합니다. 자세한 내용은 MATLAB에서 호출 가능한 C++ 함수 작성하기(MEX 파일) 항목을 참조하십시오.

MATLAB R2017b 이하 버전에서 MEX 함수를 실행해야 한다면 C++ 애플리케이션에서 C Matrix API 함수를 사용해야 합니다. C Matrix API를 사용하여 빌드한 MEX 함수는 모든 C++ 언어 표준을 지원합니다. 여기에서는 MEX 파일을 생성하고 사용할 때 고려해야 하는 C++ 언어와 관련한 문제를 구체적으로 설명합니다.

C++ 애플리케이션에서 MATLAB C 코드 예제를 사용할 수 있습니다. 예를 들어, C 명령문과 C++ 명령문이 모두 포함된 C++ 클래스 예제에서 mexcpp.cpp를 참조하십시오.

C++ 소스 파일 만들기

MATLAB C++ 소스 코드 예제에서는 .cpp 파일 확장자를 사용합니다. 확장자 .cpp는 모호하지 않으며 C++ 컴파일러에서 인식됩니다. 가능한 다른 확장자로는 .C, .cc, .cxx가 있습니다.

컴파일하고 연결하기

C++ MEX 파일을 빌드하려면 다음을 입력하십시오.

mex filename.cpp

여기서 filename은 MATLAB 경로에 있는 소스 코드 파일의 이름입니다.

C++ MEX 파일은 이 파일을 컴파일할 때 사용된 것과 동일한 버전의 MATLAB이 설치된 시스템에서만 실행할 수 있습니다.

클래스 소멸자(Destructor)의 메모리 고려 사항

MEX 함수에 사용된 클래스의 C++ 소멸자에는 mxFree 함수나 mxDestroyArray 함수를 사용하지 마십시오. MEX 함수가 오류를 발생시키는 경우 MATLAB은 MEX 파일 변수를 정리합니다. Automatic Cleanup of Temporary Arrays in MEX Files 항목의 설명을 참조하십시오.

오류로 인해 객체가 범위를 벗어나면 MATLAB은 C++ 소멸자를 호출합니다. 소멸자에서 직접 메모리를 해제하면 MATLAB과 소멸자가 모두 동일한 메모리를 해제하게 되므로, 메모리가 손상될 수 있습니다.

mexPrintf를 사용하여 MATLAB 명령 창에 출력하기

C++ MEX 파일에서 cout 함수나 C 언어 printf 함수를 사용하면 예상대로 동작하지 않습니다. mexPrintf 함수를 대신 사용하십시오.

C++ 클래스 예제

MEX 파일 mexcpp.cpp는 C 언어 MEX 파일과 함께 C++ 코드를 사용하는 방법을 보여줍니다. 이 예제에서는 C Matrix API의 함수를 사용합니다. 또한 멤버 함수, 생성자, 소멸자 및 iostream include 파일을 사용합니다.

이 함수는 멤버 함수 displayset_data, 변수 v1v2와 함께 myData 클래스를 정의합니다. 또한 myData 클래스의 객체 d를 생성하고 v1v2의 초기화된 값을 표시합니다. 그런 다음, v1v2를 사용자가 입력한 값으로 설정하고 새 값을 표시합니다. 마지막으로, delete 연산자가 객체를 정리합니다.

이 예제를 빌드하려면 파일을 MATLAB 경로에 복사하고 명령 프롬프트에 다음을 입력하십시오.

mex mexcpp.cpp

호출하는 구문은 mexcpp(num1, num2)입니다.

C++ 파일 처리 예제

mexatexit.cpp 예제에서는 C++ 파일 처리 기능을 보여줍니다. 이 예제를 mexAtExit 함수를 사용하는 C 코드 예제 mexatexit.c와 비교해 보십시오.

C++ 예제

C++ 예제에서는 fileresource 클래스를 사용하여 파일 열기 및 닫기 함수를 처리합니다. MEX 함수는 이 클래스의 소멸자를 호출하여 데이터 파일을 닫습니다. 또한 이 예제에서는 데이터 파일에서 작업을 수행할 때 화면에 메시지를 출력합니다. 그러나, 이 경우 유일하게 수행되는 C 파일 작업은 쓰기 작업 fprintf입니다.

mexatexit.cpp MEX 파일을 빌드하려면 파일을 MATLAB 경로에 복사하고 다음을 입력하십시오.

mex mexatexit.cpp

다음을 입력합니다.

z = 'for the C++ MEX-file';
mexatexit(x)
mexatexit(z)
clear mexatexit
Writing data to file.
Writing data to file.

matlab.data의 내용을 표시합니다.

type matlab.data
my input string
for the C++ MEX-file

C 예제

C 코드 예제에서는 MEX 파일이 지워지면 정리 작업(데이터 파일 닫기)을 수행하기 위한 mexAtExit 함수를 등록합니다. 이 예제는 fopen, fprintf, fclose 파일 작업을 수행할 때 mexPrintf를 사용하여 화면에 메시지를 출력합니다.

mexatexit.c MEX 파일을 빌드하려면 파일을 MATLAB 경로에 복사하고 다음을 입력하십시오.

mex mexatexit.c

예제를 실행합니다.

x = 'my input string';
mexatexit(x)
Opening file matlab.data.
Writing data to file.

MEX 파일을 지웁니다.

clear mexatexit
Closing file matlab.data.

matlab.data의 내용을 표시합니다.

type matlab.data
my input string

참고 항목

|

관련 예제

세부 정보