빠른 포장 DLL

1617 단어 dll
최근에 윈도우즈에서 VS 프로젝트가 동적 링크 라이브러리를 어떻게 내보내는지 초보적으로 연구한 결과 간단하게 요약할 수 있다.
구성 등록 정보 일반에서 구성 유형을 동적 라이브러리(.dll)로 설정합니다.
내보내기 함수 정의가 포함된 헤더 파일에 다음과 같은 매크로 정의를 추가합니다.
 #ifdef DLL_EXPORTS
 #define DLL_API __declspec(dllexport)
 #else
 #define DLL_API __declspec(dllimport)
 #endif

내보내려는 모든 함수에 대해 함수 A, B, C 등이라고 해도 무방하다. 이를 다음과 같이 쓸 수 있다.
 extern “C”{
       DLL_API  int    _cdecl A( int x, int y );
       DLL_API  char _cdecl B( const char *  a, int l );
       DLL_API  bool _cdecl C( float m, float n );
 }

이에 따라 이 함수들은 머리도 같은 위치DLL_API_cdecl(현재 이 호출 프로토콜만 사용하고 있음)을 더해야 하지만 더하지 않아도 된다extern "C".
C/C++ 프리 프로세서에 프리 프로세서 정의DLL_EXPORTS를 추가하면 전체 프로젝트의 모든 파일 시작 부분에 다음과 같습니다.
  #define DLL_EXPORTS

이렇게 하면 DLL_API 여기 함수가 내보내기인지 가져오는지 제어할 수 있습니다.컴파일링 기간에 DLL_EXPORTS가 정의되어 함수가 내보내집니다.링크가 필요할 때 함수도 가져올 수 있습니다.
DLL은 원래 함수를 내보내기 위해 설계된 것일 뿐인데 DLL이 등장한 후에야 C++의 대상을 대상으로 하기 때문에 DLL 내보내기 클래스가 좀 불편하다.여기에는 클래스의 함수를 사용하는 상황만 언급합니다.
내보낼 클래스마다 구조를 조금씩 바꿔야 합니다.우리는 특별히 부류를 구성하여 도출류를 계승할 수 있으며, 도출해야 할 모든 함수는 virtual 라고 표시할 수 있다.부류는 반드시 허석 구조 함수가 있어야 하며, 구조 함수는 필요 없다.부류가 정의한 모든 허함수는 비어 있거나 적당한 무효값을 되돌려야 합니다.
부류가 정의된 후에 함수를 내보냅니다. 그 반환 형식은 부류 실례의 바늘이지만 함수 내부에는 new의 내보내기 클래스가 반환 값으로 사용됩니다.또한 헤더 파일에서 내보낸 함수에 함수 바늘을 제공하여 호출자가 사용할 수 있도록 합니다.
나는 이런 허함수 방법의 원리를 대충 찾아봤는데 허함수와 정적 변수는 초기화할 때 클래스가 있는 메모리 공간에 직접 넣을 수 있기 때문에 호출될 수 있는 것 같다.
현식 호출을 할 때, 앞에 생성된 동적 링크 라이브러리와 같은 헤더 파일만 사용하면 된다.
원문은 블로거가 일선시공 BBS에 발표했다.

좋은 웹페이지 즐겨찾기