본문 바로가기
프로그래밍

export(함수 내보내기)

by 코끼리_땃쥐 2022. 4. 2.
반응형

프로그램에서 이름 또는 서수 또는 데이터로 함수를 내보냅니다.

 

/export 옵션은 다른 프로그램에서 함수를 호출하거나 데이터를 사용할 수 있도록 프로그램에서 내보낼 함수 또는 데이터 항목을 지정합니다. 내보내기에서는 일반적으로 DLL에 정의됩니다.

 

항목 이름은 호출 프로그램에서 사용할 함수 또는 데이터 항목의 이름입니다. 서수는 1에서 65,535 범위의 내보내게 테이블에 대한 인덱를 지정합니다. 서수를 지정하지 않으면 LINK에서 해당 서수를 할당합니다. NONAME키워드는 함수를 항목이름 없이 서수로만 내보냅니다.

 

DATA 키워드는 내보낸 항목이 데이터 항목임을 지정합니다. 클라이언트 프로그램의 데이터 항목은 extern_declspec(dllimport)를 사용하여 선언해야 합니다.

 

정의를 내보내는 방법에는 권장되는 사용 순서로 나열되어 있습니다.

 

1. 소스 코드의 __declspec(dllexport)

 

2. .def 파일의 EXPORTS문

 

3. LINK 명령의 /EXPORT 사양

 

4. 소스 #pragma comment(linker, "/export : definition" ) 코드의 주석 지시문 입니다.

 

이러한 모든 메서드는 동일한 프로그램에서 사용할 수 있습니다. LINK가 내보내기를 포함하는 프로그램을 빌드할 때 빌드에 .exp 파일이 사용되지 않는 한 가져오기 라이브러리도 만듭니다.

 

LINK는 데코레이팅된 형식의 식별자를 사용합니다. 컴파일러는 .obj 파일을 만들 때 식별자를 데코레이트합니다. 소스 코드에 표시되는 것처럼 디코더 형식의 링커에 항목이름이 지정된 경우 LINK는 이름과 일치시키려고 시도합니다.

고유한 일치 항목을 찾을 수 없ㅎ는 경우 LINK에서 오류 메시지를 발생합니다. DUMPBIN 도구를 사용하여 링커에 지정해야 하는 경우 식별자의 데코레이팅된 이름 형식을 가져옵니다.

※ 참고

    선언된 C 식별자의 데코레이팅된 __cdecl 형식을 __stdcall지정하지 마세요.

 

디코딩되지 않은 함수 이름을 내보내고 빌드 구성(예 : 32비트 뽀는 64비트 빌드)에 따라 다른 내보내기를 수행해야 하는 경우 각 구성에 대해 서로 다른 DEF 파일을 사용할 수 있습니다. (DEF 파일에서는 전처리기 조건부 지시문을 사용할 수 없습니다.) 또는 여기에 표시된 것처럼 함수 선언 앞에 지시문을 사용할 #pragma comment 수 있습니다. 여기서 PlainFuncName 는 장식되지 않은 이름이며 _PlainFuncName@4 함수의 데코레이팅된 이름입니다.

 

#pragma comment(linker, "/export:PlainfuncName=_PlainFuncName@4")

BOOL CALLBACK PlainFuncName(Things * lpParams)

반응형

'프로그래밍' 카테고리의 다른 글

이름 궁합 테스트 만들기  (0) 2022.06.06
로또번호 랜덤 뽑기  (0) 2022.06.02
메이플 스타포스 강화 시뮬레이션 코드  (0) 2022.06.02
class 상속  (0) 2022.01.17
서브 클래싱이란 ?  (0) 2022.01.17

댓글