Main Content

헤더 및 C++ 소스 파일

이 예제에서는 clibPublishInterfaceWorkflow를 호출하여 헤더 파일 matrixOperations.hpp에 선언되고 C++ 소스 파일 matrixOperations.cpp에 정의된 C++ 라이브러리에 대한 MATLAB® 인터페이스를 만드는 방법을 보여줍니다.

MATLAB은 다음 폴더에서 소스 파일을 제공합니다.

fullfile(matlabroot,"extern","examples","cpp_interface")

이 예제에서 폴더는 다음과 같습니다.

ans = 

    "C:\Program Files\MATLAB\R2023a\extern\examples\cpp_interface"

워크플로 스크립트 만들기

쓰기 가능한 폴더(예: C:\work\publish)로 이동하고 clibPublishInterfaceWorkflow를 호출합니다. 대화 상자에서 워크플로 스크립트의 이름을 지정합니다(예: publishmatrixlib.mlx). 워크플로 스크립트에는 인터페이스 퍼블리시를 안내하는 단계가 들어 있습니다. 이 스크립트를 사용하여 인터페이스 퍼블리시를 위한 파라미터를 저장합니다. 모든 플랫폼에서 동일한 스크립트를 사용할 수 있습니다.

참고

워크플로 스크립트를 사용하면 여러 MATLAB 세션에서 인터페이스를 반복적으로 생성, 정의, 빌드, 테스트할 수 있습니다. 그러나 스크립트는 기존 정의 파일 덮어쓰기 옵션을 사용하여 다시 만든 라이브러리 정의 파일에 대한 편집 내용은 저장하지 않습니다.

Step 1: GENERATE

먼저, 라이브러리 정의 파일을 생성합니다. 워크플로 스크립트에는 이 단계에 대한 C++ 인터페이스 생성 라이브 편집기 작업이 포함되어 있습니다. 이 작업을 사용하여 라이브러리를 구성하는 파일을 선택하고 라이브러리 정의 파일을 생성하기 위한 옵션을 설정합니다.

파일 선택

라이브러리는 matrixOperations.hpp 헤더 파일과 Windows® matrixOperations.cpp 소스 파일에 의해 정의됩니다. 헤더 및 소스 파일(Headers and source files)을 라이브러리 유형으로 선택합니다.

라이브러리 시작 경로를 설정하려면 폴더 fullfile(matlabroot,"extern","examples","cpp_interface")를 찾아 폴더 선택을 클릭합니다.

헤더 파일을 선택하려면 찾아보기 버튼을 사용하여 matrixOperations.hpp 파일을 엽니다.

헤더 파일은 cppshrhelp.hpp 헤더 파일에 종속되어 있습니다. 라이브러리 시작 경로의 폴더로 이동하고 폴더 선택을 클릭합니다.

지원하는 소스 파일을 선택하려면 찾아보기 버튼을 사용하여 matrixOperations.cpp 파일을 엽니다.

구성 선택

이 예제에서 C++ 컴파일러MinGW64 Compiler (C++)로 설정되어 있습니다.

디폴트 인터페이스 라이브러리 이름matrixOperations입니다. 이 이름은 MATLAB에서 기능을 호출하기 위해 clib와 함께 사용됩니다. 예를 들어, 라이브러리 객체 Mat를 만드는 경우 명령 프롬프트에서 다음을 입력합니다.

clib.matrixOperations.Mat

출력 폴더가 쓰기 가능한 폴더인지 확인합니다.

인터페이스를 개발하는 동안 정의 파일을 다시 만들 수 있도록 기존 정의 파일 덮어쓰기 체크박스를 선택합니다.

(선택 사항) C++ 라이브러리 설정 지정

.h 파일을 C 헤더 파일로 취급 파라미터를 선택합니다.

(선택 사항) 정의 구성 지정

이 라이브러리에 대한 인터페이스를 빌드하는 데 선택적 정의 구성은 필요하지 않습니다.

결과 표시

기본적으로 정의 파일을 생성할 때 함수는 사용 가능한 구문(라이브러리의 클래스 및 함수)을 표시합니다. 인터페이스를 개발하는 동안 사용 불가능한 구문 표시 체크박스도 선택하십시오. 이를 통해, 지원되지 않기 때문에 포함되지 않은 구문이 뭔지 알 수 있습니다.

정의 파일 생성

Generate definition file을 클릭합니다. 스크립트가 진행률을 표시하고 지정된 출력 폴더에 라이브러리 정의 파일 definematrixOperations.m을 생성합니다.

C++ compiler set to 'MinGW64 Compiler (C++)'.
Definition file definematrixOperations.m contains definitions for 10 constructs supported by MATLAB.
- 5 constructs are fully defined.
- 5 constructs partially defined and commented out.

To include the 5 undefined constructs in the interface, uncomment and complete the definitions in definematrixOperations.m.
To build the interface, call build(definematrixOperations).
MATLAB Interface to matrixOperations Library

Class clib.matrixOperations.Mat

  Constructors:
    clib.matrixOperations.Mat(clib.matrixOperations.Mat)
    clib.matrixOperations.Mat()

  Methods:
    uint64 getLength()

  No Properties defined

Functions
clib.matrixOperations.updateMatByX(clib.matrixOperations.Mat,int32)

여러 세션에서 개발을 가능하게 하는 방법

인터페이스를 퍼블리시하는 동안 단계를 반복하거나 publishmatrixlib.mlx 스크립트를 닫았다가 다시 열거나 MATLAB을 다시 시작하는 경우가 있을 수 있습니다. 이러한 워크플로우를 수행할 때는 다음 섹션에 있는 지침을 따르십시오.

  • MATLAB 세션 간에 작업 공간 변수를 유지합니다. Restore library definition 섹션에서 outputFolderPath 변수를 출력 폴더 파라미터의 값으로 설정합니다. libraryNameForInterface 변수를 인터페이스 라이브러리 이름 파라미터 matrixlib로 설정합니다. 그런 다음 섹션을 실행합니다. 자세한 내용은 Restore Library Definition 항목을 참조하십시오.

  • Enable out-of-process execution mode 섹션을 실행해 보십시오. 인터페이스를 개발하는 동안 이 모드를 사용하면 테스트하는 동안 MATLAB을 다시 시작할 필요가 없습니다. 라이브러리의 기능을 호출한 후 Unload out-of-process library 섹션을 실행하여 라이브러리를 언로드할 수 있습니다. 자세한 내용은 Load Out-of-Process C++ Library 항목을 참조하십시오.

Step 2: DEFINE

라이브러리 정의 파일을 생성했을 때 MATLAB에서 5개 구문이 부분적으로 정의되었다고 보고했습니다. 기능을 완전히 정의하려면 definematrixlib.m 파일을 편집하십시오. 파일을 편집하려면 DEFINE 섹션을 실행하십시오.

누락된 구문 정의하기

라이브러리 정의 파일을 스크롤하여 이 구문에 대해 주석 처리된 코드 블록을 찾습니다. MATLAB은 다음 함수에서 사용하는 인수의 크기를 자동으로 결정할 수 없습니다.

  • setMatMat 클래스의 C++ 메서드

  • getMatMat 클래스의 C++ 메서드

  • copyMatMat 클래스의 C++ 메서드

  • addMat — C++ 함수

  • updateMatBySize — C++ 함수

matrixOperations 라이브러리의 도움말 문서를 바탕으로 인수 정의문에 <SHAPE>의 값을 지정할 수 있습니다. 자세한 내용은 Define Missing SHAPE Parameter 항목을 참조하십시오.

  1. 각 구문에 대해 이 구문을 정의하는 명령문의 주석을 해제합니다.

  2. <SHAPE> 인수를 다음 값으로 바꿉니다.

    구문

    인수 이름

    인수 C++ 정의

    설명

    <SHAPE>를 대체할 값

    setMatsrcint [] src

    행렬의 길이는 입력 인수 len에 의해 정의됩니다.

    "len"
    getMatRetValint const *

    출력 인수의 길이는 입력 인수 len에 의해 정의됩니다.

    "len"
    copyMatdestint * dest

    dest의 길이는 입력 인수 len에 의해 정의됩니다.

    "len"
    addMatmatMat const * mat

    이 함수는 단일 mat 인수를 받습니다.

    1
    updateMatBySizearrint * arr

    arr의 길이는 입력 인수 len에 의해 정의됩니다.

    "len"
  3. 정의 파일을 저장하고 닫습니다.

  4. 파일에서 편집한 내용을 확인하려면 Confirm edits and run summary 섹션을 실행합니다. 파일에서 보고된 오류를 모두 해결합니다. summary 함수는 이제 인터페이스에 setMat, getMat, copyMat, addMat, updateMatBySize가 포함되어 있음을 보여줍니다.

MATLAB Interface to matrixOperations Library

Class clib.matrixOperations.Mat

  Constructors:
    clib.matrixOperations.Mat(clib.matrixOperations.Mat)
    clib.matrixOperations.Mat()

  Methods:
    setMat(clib.array.matrixOperations.Int)
    clib.array.matrixOperations.Int getMat(uint64)
    uint64 getLength()
    copyMat(clib.array.matrixOperations.Int)

  No Properties defined

Functions
int32 clib.matrixOperations.addMat(clib.matrixOperations.Mat)
clib.matrixOperations.updateMatByX(clib.matrixOperations.Mat,int32)
clib.matrixOperations.updateMatBySize(clib.matrixOperations.Mat,clib.array.matrixOperations.Int)

Step 3: BUILD

라이브러리에 대한 matrixOperations 인터페이스를 빌드하려면 스크립트의 BUILD 섹션을 실행합니다.

참고

생성, 정의, 빌드 단계를 반복할 수 있습니다. 그러나 라이브러리의 함수에 대한 도움말을 표시하거나 라이브러리의 함수를 호출한 후에는 동일한 MATLAB 세션에서 definematrixlib 정의 파일을 업데이트할 수 없습니다. MATLAB을 다시 시작하거나, 구성 선택 섹션의 인터페이스 라이브러리 이름 파라미터를 변경하여 새 정의 파일을 만드십시오.

Step 4: TEST

Set up and copy run-time libraries

Set up and copy run-time libraries 섹션을 실행합니다. 이 라이브러리에는 추가 런타임 종속 관계가 없으므로 명령을 수정하지 않아도 됩니다.

Enable out-of-process execution mode

정의 파일을 변경해야 하는 경우, MATLAB을 다시 시작할 필요가 없도록 이 명령을 실행하여 별도 프로세스(out-of-process)로 인터페이스 라이브러리를 호출하는 기능을 설정합니다. 자세한 내용은 Load C++ Library In-Process or Out-of-Process 항목을 참조하십시오.

Call help on interface library

인터페이스 라이브러리에 대한 도움말을 표시하려면 Call help on interface library 섹션을 실행합니다.

Write code to call and test interface library

Write code to call and test interface library의 코드 섹션을 사용하여 다음 테스트를 작성합니다.

matObj = clib.matrixlib.Mat;   % Create a Mat object
intArr = [1,2,3,4,5];
matObj.setMat(intArr);     % Set the values to intArr
retMat = matObj.getMat(5)  % Display the values
retMat = 

  read-only clib.array.matrixlib.Int with properties:

    Dimensions: 5
     Resizable: 0

인터페이스 공유하기

다른 MATLAB 사용자와 인터페이스를 공유하려면 툴박스 설치(.mltbx) 파일을 만듭니다. Distribute MATLAB Interface to C++ Library의 지침에 따라 다음을 수행하십시오.

  • 툴박스 폴더를 인터페이스 파일 matrixOperationsInterface.dll이 포함된 matrixOperations 폴더로 설정합니다.

  • 컴파일된 라이브러리 파일 matrixOperations.dll을 동일한 폴더에 저장합니다.

  • 네임스페이스(호출 구문)를 clib.matrixOperations로 식별합니다.

참고 항목

관련 항목