공유 C 라이브러리 함수에 인수 전달하기
C 데이터형과 그에 상응하는 MATLAB 데이터형
공유 라이브러리 인터페이스는 모든 표준 스칼라 C 데이터형을 지원합니다. 다음 표에는 이러한 C 데이터형과 그에 상응하는 MATLAB® 데이터형이 나와 있습니다. MATLAB은 왼쪽 열에 표시된 C 데이터형을 갖는 인수에 대해 오른쪽 열의 데이터형을 사용합니다.
참고
MATLAB에서 반환되는 모든 스칼라 값은 double
형입니다.
MATLAB 프리미티브 데이터형
C 데이터형 | 상응하는 MATLAB 데이터형 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
unsigned long (Windows) |
|
unsigned long (Linux) |
|
|
|
|
|
|
|
| 문자형 벡터로 구성된 셀형 배열 |
다음 표에는 MATLAB이 C 포인터(첫 번째 열)를 그에 상응하는 MATLAB 함수 시그니처(두 번째 열)에 매핑하는 방법이 나와 있습니다. 일반적으로, 상응하는 MATLAB 데이터형 열의 변수를 이에 대응하는 인수 데이터형을 갖는 함수에 전달할 수 있습니다. lib.pointer
객체를 대신 사용해야 할 경우에 대한 자세한 내용은 C 함수의 포인터 인수 항목을 참조하십시오.
MATLAB 확장 데이터형
C 포인터 유형 | 인수 데이터형 | 상응하는 MATLAB 데이터형 | 공유 라이브러리 shrlibsample의 |
---|---|---|---|
|
| double | addDoubleRef |
|
| single | |
|
| (u)int( | multiplyShort |
|
| int8 | |
|
|
| stringToUpper |
|
| 문자형 벡터로 구성된 셀형 배열 | |
enum |
| ||
|
|
| allocateStruct |
|
| deallocateStruct | |
|
|
| |
| structure | MATLAB | addStructFields |
|
| MATLAB 배열 | |
|
|
|
MATLAB이 함수 시그니처를 표시하는 방법
다음은 MATLAB 함수 시그니처에 표시된 입력 인수와 출력 인수에 대해 유의해야 할 사항입니다.
많은 인수(예:
int32
와double
)들이 그에 상응하는 C 인수와 유사합니다. 이러한 경우, 해당 인수에 대해 표시된 MATLAB 데이터형을 전달하십시오.일부 C 인수(예:
**double
또는 미리 정의된 구조체)는 표준 MATLAB 데이터형과 다릅니다. 이러한 경우, 표준 MATLAB 데이터형을 전달한 후 MATLAB이 자동으로 변환하도록 하거나, MATLAB 함수libstruct
와libpointer
를 사용하여 직접 데이터를 변환하십시오. 자세한 내용은 함수에 전달된 데이터를 수동으로 변환하기 항목을 참조하십시오.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
함수를 사용하여 만든 포인터를 전달하십시오.
참고 항목
libstruct
| libpointer
| libfunctions
| libfunctionsview