CC_DLL은 무엇에 쓰입니까
1 #if defined(_USRDLL)
2 #define CC_DLL __declspec(dllexport)
3 #else /* use a DLL library */
4 #define CC_DLL __declspec(dllimport)
5 #endif
그래서 가져오기 내보내기 함수를 설명하는 데 사용됩니다
__declspec(dllexport)은 내보내기 함수를 설명합니다. 일반적으로 dll에서declspec (dllimport) 는 가져오는 함수를 설명합니다. 보통 dll의exe를 사용하는 데 사용됩니다.
정보declspec(dllexport) 및declspec(dllimport)은 다음과 같습니다.
1.declspec(dllexport):
하나의 함수를 내보내기 함수로 명명하면, 이 함수는 DLL의 대외 함수 인터페이스로 다른 프로그램에 호출된다는 것이다.
일반적으로 extern "C"와 함께 사용됩니다. 형식은 다음과 같습니다.
extern "C"{ declspec(dllexport) RETURN TYPE FUNCTION () {} DLL 내보내기 함수를 만들 때 C++에 함수 재부팅이 존재하기 때문에declspec(dllexport) FUNCTION(int, int)은 DLL에서 decorate가 됩니다. 예를 들어 decorate가function 이 됩니다.int_또한 서로 다른 컴파일러decorate의 방법이 다르기 때문에GetProcAddress로FUNCTION 주소를 얻을 때 불편을 초래한다.extern'C'를 사용할 때 상기한decorate는 발생하지 않는다. 왜냐하면 C는 함수 재부팅이 없기 때문에extern'C'에 의해 수식된 함수는 재부팅 능력을 갖추지 못한다.
2. MSDN에서 발췌한 내용은 다음과 같습니다.
"32비트 컴파일러 버전에서는 declspec(dllexport) 키워드를 사용하여 DLL에서 데이터, 함수, 클래스 또는 클래스 구성원 함수를 내보낼 수 있습니다. declspec(dllexport)는 대상 파일 (즉 obj 파일) 에 내보내기 명령을 추가합니다. 함수를 내보내려면 declspec(dllexport) 키워드가 호출된 키워드의 왼쪽 (키워드가 지정된 경우) 에 나타나야 합니다. 예를 들어:
__declspec(dllexport) void __cdecl Function1(void);
클래스의 모든 공통 데이터 구성원과 구성원 함수를 내보내려면 다음과 같이 키워드가 클래스 이름의 왼쪽에 나타나야 합니다.
class __declspec(dllexport) CExampleExport : public CObject { ... class definition ... };
DLL을 생성할 때 일반적으로 내보내는 함수의 원형 및/또는 클래스를 포함하는 헤더 파일을 만들고declspec (dllexport) 에서 머리 파일에 설명을 추가합니다.코드의 가독성을 높이려면declspec(dllexport)에서 매크로를 정의하고 내보내는 각 기호에 매크로를 사용합니다. #define DllExportdeclspec( dllexport ) ”
3.declspec(dllexport) 및.def
모듈 정의(.def) 파일은 다양한 DLL 속성을 설명하는 Module 문을 포함하는 텍스트 파일입니다.1, 둘 다 응용 프로그램에 공통 기호를 가져오거나 DLL에서 함수를 내보내는 것이 목적입니다.2. 추가declspec (dllexport) 는 사용하지 않는 것을 제공하기 위해서입니다.def 파일EXE 또는.DLL에서 함수를 내보내는 간단한 방법입니다.3. 을 사용하지 않으면declspec(dllimport) 또는declspec(dllexport)에서 DLL 함수를 내보내려면 DLL이 필요합니다.def 파일.4、언제든지 추가를 선택하는 것은 아니다declspec(dllexport)을 포기하십시오.def의 방식은 모두 좋다.만약 DLL이 VC++ 사용자에게 제공된다면, DLL을 컴파일할 때 발생하는 것만 있으면 됩니다.lib은 DLL을 쉽게 호출할 수 있는 사용자에게 제공합니다.그러나 DLL이 VB, PB, Delphi 사용자에게 제공된다면 작은 문제가 발생할 수 있습니다.왜냐하면 VC++는 에declspec(dllexport)에서 설명하는 함수는 다음 함수와 같이 이름 변환을 합니다.declspec(dllexport) int __stdcall IsWinNT()가 ()로 변환됩니다.IsWinNT@0, 이렇게 하면 당신은 VB에서 반드시 이렇게 성명해야 합니다: Declare Function IsWinNT Lib "my.dll"Alias "IsWinNT@0"() As Long @ 의 뒤쪽 수는 매개변수 유형에 따라 다를 수 있습니다. 이것은 분명 불편합니다. 따라서 이 변환을 피하려면.def 파일 방식을 사용하십시오.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.