Main Content

공유 C 라이브러리 함수에 인수 전달하기

C 데이터형과 그에 상응하는 MATLAB 데이터형

공유 라이브러리 인터페이스는 모든 표준 스칼라 C 데이터형을 지원합니다. 다음 표에는 이러한 C 데이터형과 그에 상응하는 MATLAB® 데이터형이 나와 있습니다. MATLAB은 왼쪽 열에 표시된 C 데이터형을 갖는 인수에 대해 오른쪽 열의 데이터형을 사용합니다.

참고

MATLAB에서 반환되는 모든 스칼라 값은 double형입니다.

MATLAB 프리미티브 데이터형

C 데이터형상응하는 MATLAB 데이터형

char, byte

int8

unsigned char, byte

uint8

short

int16

unsigned short

uint16

int

int32

long (Windows®)

int32,
long

long (Linux®)

int64,
long

unsigned int

uint32

unsigned long (Windows)

uint32,
long

unsigned long (Linux)

uint64,
long

float

single

double

double

char *

char형 배열(1xn)

*char[]

문자형 벡터로 구성된 셀형 배열

다음 표에는 MATLAB이 C 포인터(첫 번째 열)를 그에 상응하는 MATLAB 함수 시그니처(두 번째 열)에 매핑하는 방법이 나와 있습니다. 일반적으로, 상응하는 MATLAB 데이터형 열의 변수를 이에 대응하는 인수 데이터형을 갖는 함수에 전달할 수 있습니다. lib.pointer 객체를 대신 사용해야 할 경우에 대한 자세한 내용은 C 함수의 포인터 인수 항목을 참조하십시오.

MATLAB 확장 데이터형

C 포인터 유형인수
데이터형
상응하는
MATLAB 데이터형

공유 라이브러리 shrlibsample
예제 함수

double *

doublePtr

doubleaddDoubleRef

float *

singlePtr

single 

intsize *(정수 포인터 유형)

(u)int(size)Ptr
예를 들어, int64 *int64Ptr이 됩니다.

(u)int(size)multiplyShort

byte[]

int8Ptr

int8 

char[](값에 의해 전달되는 null 종료 문자열)

cstring

char형 배열(1xn)

stringToUpper

char **(문자열에 대한 포인터로 구성된 배열)

stringPtrPtr

문자형 벡터로 구성된 셀형 배열

 
enum

enumPtr

  

type **

typePtrPtr
예를 들어, double **
doublePtrPtr이 됩니다.

lib.pointer 객체

allocateStruct

void *

voidPtr

 deallocateStruct

void **

voidPtrPtr

lib.pointer 객체

 

struct(C 스타일 구조체)

structure

MATLAB struct

addStructFields

mxArray *

MATLAB array

MATLAB 배열

 

mxArray **

MATLAB arrayPtr

lib.pointer 객체

 

MATLAB이 함수 시그니처를 표시하는 방법

다음은 MATLAB 함수 시그니처에 표시된 입력 인수와 출력 인수에 대해 유의해야 할 사항입니다.

  • 많은 인수(예: int32double)들이 그에 상응하는 C 인수와 유사합니다. 이러한 경우, 해당 인수에 대해 표시된 MATLAB 데이터형을 전달하십시오.

  • 일부 C 인수(예: **double 또는 미리 정의된 구조체)는 표준 MATLAB 데이터형과 다릅니다. 이러한 경우, 표준 MATLAB 데이터형을 전달한 후 MATLAB이 자동으로 변환하도록 하거나, MATLAB 함수 libstructlibpointer를 사용하여 직접 데이터를 변환하십시오. 자세한 내용은 함수에 전달된 데이터를 수동으로 변환하기 항목을 참조하십시오.

  • C 함수는 종종 참조에 의해 전달된 입력 인수의 데이터를 반환합니다. MATLAB은 이러한 값을 반환하기 위해 출력 인수를 추가로 생성합니다. Ptr이나 PtrPtr로 끝나는 입력 인수는 출력값으로도 표시됩니다.

MATLAB 함수 시그니처의 예를 보려면 공유 라이브러리 shrlibsample 항목을 참조하십시오.

인수 전달에 대한 지침

  • 비 스칼라 인수는 라이브러리 함수에서 참조에 의해 전달되도록 선언되어야 합니다.

  • 라이브러리 함수가 단일 첨자 인덱싱을 사용하여 2차원 행렬을 참조하는 경우, C 프로그램에서는 행렬을 한 행씩 행 방향으로 처리한다는 점에 유의하십시오. MATLAB은 행렬을 열 방향으로 처리합니다. 함수가 C 프로그램처럼 동작하도록 하려면 함수를 호출하기 전에 입력 행렬을 전치하고, 그런 다음 함수 출력값을 전치하십시오.

  • 선택적 입력 인수를 지원하는 라이브러리 함수에 NULL 파라미터를 전달하려면 빈 배열 []을 사용하십시오. 이 표기법은 libfunctions 또는 libfunctionsview에서 보이는 것처럼, 인수가 Ptr 또는 PtrPtr로 선언된 경우에만 유효합니다.

NULL 포인터

다음과 같은 방법으로 라이브러리 함수에 전달할 NULL 포인터를 만들 수 있습니다.

  • 빈 배열 []을 인수로 전달합니다.

  • libpointer 함수를 사용합니다.

    p = libpointer; % no arguments 
    p = libpointer('string') % string argument
    p = libpointer('cstring') % pointer to a string argument
  • libstruct 함수를 사용합니다.

    p = libstruct('structtype'); % structure type  

libstruct 객체

libstruct 객체를 만들려면 structtype 인수만 사용하여 libstruct를 호출하십시오. 예를 들면 다음과 같습니다.

sci = libstruct('c_struct')
get(sci)
    p1: 0
    p2: 0
    p3: 0

MATLAB이 초기화된 값을 표시합니다.

함수에 전달된 데이터를 수동으로 변환하기

대부분의 경우 MATLAB은 외부 라이브러리 함수로 전달되거나 외부 라이브러리 함수에서 전달된 데이터를 이 외부 함수에서 요하는 유형으로 자동 변환합니다. 하지만, 사용자가 직접 인수 데이터를 수동으로 변환하도록 선택할 수도 있습니다. 예를 들면 다음과 같습니다.

  • 동일한 데이터를 일련의 라이브러리 함수에 전달할 경우, 함수를 호출할 때마다 MATLAB이 데이터를 자동으로 변환하도록 하지 말고 첫 번째 함수를 호출하기 전에 한 번 수동으로 변환하십시오. 이렇게 하면 불필요한 복사 및 변환 작업 횟수가 줄어듭니다.

  • 큰 구조체를 전달할 경우, 일반적인 MATLAB 구조체를 사용하는 대신 함수에 사용된 C 구조체의 형태와 일치하는 MATLAB 구조체를 만들어 메모리를 절약하십시오. libstruct 함수는 라이브러리에서 가져온 C 구조체를 본뜬 MATLAB 구조체를 만듭니다.

  • 외부 함수에 대한 인수가 둘 이상의 참조 수준(예: double **)을 사용할 경우, MATLAB이 자동으로 데이터형을 변환하는 것에 의지하지 말고 libpointer 함수를 사용하여 만든 포인터를 전달하십시오.

참고 항목

| | |

관련 예제

세부 정보