dll 만들기 예제

만들기 단추를 선택하여 클라이언트 프로젝트를 만듭니다. 이제 클라이언트 앱에는 빌드및 실행하는 데 필요한 모든 것이 있습니다. 메뉴 모음에서 빌드 를 선택하여 응용 프로그램을 빌드합니다. Visual Studio의 출력 창에는 Visual Studio 버전에 따라 다음과 같은 예제가 있어야 합니다. 반면, DLL은 항상 라이브러리로 시작한 다음 모든 단위에 대해 사용 절을 사용합니다. 이 예제에서는 DllMessage 프로시저가 다음과 같이 되며, 이 절차는 아무 것도 수행하지 않고 간단한 메시지를 표시합니다. 다음 코드는 Win32 동적 링크 라이브러리 프로젝트 유형을 사용하여 Visual C++에서 만든 DLL의 예입니다. 참고: DLL 프로젝트를 만든 후 자동으로 PROJECTNAME_EXPORTS가 DLL 프로젝트의 전처리자 기호에 정의됩니다. 이 예제에서는 CALCULATIONDLL DLL 프로젝트가 빌드될 때 계산DLL_EXPORTS가 정의됩니다.

또한 응용 프로그램이 다중 스레드인 경우 TLS(스레드 로컬 저장소)를 사용하여 진입점 함수의 각 스레드에 개인인 메모리를 할당할 수 있습니다. 다음 코드는 DLL 진입점 함수의 예입니다. MATHLIBRARY_EXPORTS 매크로가 정의되면 MATHLIBRARY_API 매크로는 함수 선언에 __declspec(dllexport) 수정자를 설정합니다. 이 수정자는 컴파일러와 링커에게 DLL에서 함수 또는 변수를 내보내 다른 응용 프로그램에서 사용할 수 있도록 지시합니다. 예를 들어, MATHLIBRARY_EXPORTS가 정의되지 않은 경우, 예를 들어 헤더 파일이 클라이언트 응용 프로그램에 포함되는 경우 MATHLIBRARY_API는 선언에 __declspec(dllimport) 수정자를 적용합니다. 이 수정자는 응용 프로그램에서 함수 또는 변수 가져오기를 최적화합니다. 자세한 내용은 dllexport, dllimport를 참조하십시오. 모듈 정의 파일을 사용하여 내보낸 DLL 함수를 선언할 수도 있습니다. 모듈 정의 파일을 사용하는 경우 내보낸 DLL 함수에 함수 키워드를 추가할 필요가 없습니다. 모듈 정의 파일에서 라이브러리 문 및 DLL에 대 한 내보내기 문을 선언 합니다.

다음 코드는 정의 파일의 예입니다. Dlls가 코드에서 로드되기 때문에 대신 정적 라이브러리를 사용하는 것 같아요(예 : Win32에서는 LoadLibrary()를 사용해야 합니다. 진입점 함수는 간단한 초기화 작업만 수행해야 하며 다른 DLL 로드 또는 종료 함수를 호출해서는 안 됩니다. 예를 들어 진입점 함수에서 LoadLibrary 함수 또는 LoadLibraryEx 함수를 직접 또는 간접적으로 호출해서는 안 됩니다. 또한 프로세스가 종료될 때 FreeLibrary 함수를 호출해서는 안 됩니다. 이 연습은 몇 가지 일반적인 상황을 다루지 않습니다. 다른 프로그래밍 언어에서 C++ DLL의 사용을 표시 하지 않습니다. 리소스 전용 DLL을 만드는 방법은 표시되지 않습니다. 또한 로드 타임이 아닌 런타임에 DLL로드에 대한 명시적 연결의 사용을 표시하지 않습니다. 이러한 모든 작업을 수행 하려면 Visual Studio를 사용할 수 있습니다 안심 하 고 있습니다. DLL에 대한 자세한 내용은 Visual Studio에서 C/C++ DLL 만들기를 참조하십시오.

암시적 연결 및 명시적 연결에 대한 자세한 내용은 사용할 연결 방법 결정 확인을 참조하십시오.

カテゴリー: 未分類   パーマリンク

コメントは受け付けていません。