함수 원형 만들기
- 업데이트 날짜:2025-08-27
- 3분 (읽기 시간)
텍스트 기반 프로그래밍 언어로부터 공유 라이브러리를 만드려면, LabVIEW에서 원형을 만든 후 코드의 세부사항을 모두 완성해야 합니다. LabVIEW가 이 함수 원형을 생성하도록 허용하면, 공유 라이브러리의 기본 코드 구문이 유효함을 확인하는데 도움이 됩니다. 생성하는 원형 소스 파일은 .c 파일이며 전달하려는 파라미터에 대한 C 선언을 포함합니다.
다음 단계를 따라 원형 소스 파일 myshared.c를 만듭니다.
- 새 VI를 열고 이 VI를 배열 평균으로 저장합니다. 이 함수는 값 배열의 평균을 계산합니다.
- 블록다이어그램에 [라이브러리 함수 호출 노드]를 추가합니다.
- [라이브러리 함수 호출 노드]에서 마우스 오른쪽 버튼을 클릭한 후 바로 가기 메뉴에서 설정을 선택하여 라이브러리 함수 호출 대화 상자를 엽니다.
- 라이브러리 이름 또는 경로 컨트롤을 비워 둡니다.
- 다음 일반 스펙을 입력합니다:
- 함수 이름 필드에 avg_num을 입력합니다.
- 호출 형식 필드의 C 컨트롤을 선택합니다.
- 다음 스펙을 사용하여 반환값을 정의합니다:
- 라이브러리 함수 호출 대화 상자의 파라미터 탭을 탐색합니다.
- 반환 타입의 이름 컨트롤의 기본값을 보다 설명적인 이름인 에러로 변경합니다.
- 타입 풀다운 메뉴에서 숫자형을 선택합니다.
- 데이터 타입 풀다운 메뉴에서 부호있는 32 비트 정수를 선택합니다.
- 다음 스펙을 사용하여 a 파라미터를 정의합니다:
- 파라미터 리스트 오른쪽에 파라미터 추가 버튼을 클릭합니다.
- 이름 필드의 arg1 기본값을 a로 대체합니다.
- 타입 풀다운 메뉴에서 배열을 선택합니다.
- 데이터 타입 풀다운 메뉴에서 4 바이트 단정도를 선택합니다.
- 배열 포맷 풀다운 메뉴에서 배열 데이터 포인터를 선택합니다.
- 다음 스펙을 사용하여 크기 파라미터를 정의합니다:
- 파라미터 리스트 오른쪽에 파라미터 추가 버튼을 클릭합니다.
- 이름 필드의 arg2 기본값을 크기로 대체합니다.
- 타입 풀다운 메뉴에서 숫자형을 선택합니다.
- 데이터 타입 풀다운 메뉴에서 부호있는 32 비트 정수를 선택합니다.
- 전달 풀다운 메뉴에서 값을 선택합니다.
- 다음 스펙을 사용하여 avg 파라미터를 정의합니다:
- 파라미터 리스트 오른쪽에 파라미터 추가 버튼을 클릭합니다.
- 파라미터 필드의 arg3 기본값을 avg로 대체합니다.
- 타입 풀다운 메뉴에서 숫자형을 선택합니다.
- 데이터 타입 풀다운 메뉴에서 4 바이트 단정도를 선택합니다.
- 전달 풀다운 메뉴에서 값의 포인터를 선택합니다.
- 함수 원형 필드가 다음과 같이 반환값과 세 파라미터를 올바른 순서로 디스플레이하는지 확인합니다. int32_t avg_num(float *a, int32_t size, float *avg);
| 노트 함수 원형 필드에서 볼 수 있는 구문은 기술적으로 정확합니다. 하지만 다음 섹션에서 [라이브러리 함수 호출 노드]가 생성하는 .c 파일이 보다 정확합니다. 왜냐하면 첫 번째 파라미터가 float a[]로 나타나기 때문입니다. |
- 확인 버튼을 클릭하여 셋팅을 저장하고 대화 상자를 닫습니다.
- [라이브러리 함수 호출 노드] 아이콘이 셋팅을 반영하기 위해서 업데이트됩니다.
- [라이브러리 함수 호출 노드]에서 마우스 오른쪽 버튼을 클릭한 후 바로 가기 메뉴에서 C 파일 생성을 선택합니다.
- 파일을 myshared.c로 저장합니다.
| 노트 이 예제에서는 .c 소스 파일을 사용합니다. C++ 라이브러리를 사용하여 작업할 때, 소스 파일의 확장자를 .cpp로 변경합니다. |
C++ 이름 데코레이션
헤더 파일에서 C++ 컴파일러 함수 반출 지정자(C++ compiler function export directive)인 extern "C"{}를 사용하여, 이름 변환(name mangling)이라는 프로세스를 실행함으로써 C++ 컴파일러가 반출된 함수 이름을 처리할 때 플랫폼과 관계없이 실행되도록 합니다. 다음에 보이는 예제 코드를 참조하십시오:
extern "C" { int32_t MyDLLFunction(int32_t nInput, uint32_t nOutput, void *arg1); }
int32_t MyDLLFunction(int32_t nInput, uint32_t nOutput, void *arg1)
{
/* Insert Code Here */
}
| 노트 함수의 C++ 데코레이션을 비활성화한 경우, 컴파일러는 함수의 다형성 버전을 생성할 수 없습니다. |
함수 원형을 만든 후, .c 파일을 완성합니다.