c++ dll 개발 시, DllMain 함수에 dll 초기화 관련 기능 넣어도 될까요?

c++ dll 개발 시, DllMain 함수에 dll 초기화 관련 기능 넣어도 될까요?

작성일 2023.05.11댓글 1건
    게시물 수정 , 삭제는 로그인 필요

안녕하세요
C++ dll 개발 중인데 표준 API를 만들고 있습니다. 하지만 표준 API에는 dll 관련 초기화 기능이 없습니다.
그래서 DllMain DLL_PROCESS_ATTACH이라고 곳에 초기화 기능을 넣을려고 합니다.

이렇게 개발해도 향후에 문제가 없을까요?


#c++ dll 만들기 #c++ dll #c++ dll c# 사용 #c++ dll 추가 #c++ dll 불러오기 #c++ dll decompiler #c++ dll 디버깅 방법 #c++ dll 포함 빌드 #c++ dll c# #c++ dll 동적 로딩

profile_image 익명 작성일 -

DllMain 함수는 DLL이 로드되거나 언로드될 때 호출되는 진입점 함수입니다. 이를 통해 DLL이 로드되었을 때 초기화 작업을 수행하거나, 언로드될 때 정리 작업을 수행할 수 있습니다. 따라서 DllMain의 DLL_PROCESS_ATTACH 케이스에서 초기화 코드를 작성하는 것은 일반적인 방법입니다.

그러나 DllMain에서 수행할 수 있는 작업은 몇 가지 제한이 있습니다. 예를 들어, DllMain에서는 다음과 같은 작업을 수행하면 안 됩니다:

복잡한 초기화 코드 실행: DllMain은 DLL 로딩 프로세스의 일부이므로, 이 함수에서 너무 많은 시간을 소비하거나 실패할 가능성이 있는 복잡한 작업을 수행하면 안 됩니다. 만약 복잡한 초기화 작업이 필요하다면, 별도의 초기화 함수를 제공하는 것이 좋습니다.

CRT 함수 호출: DllMain에서는 C Runtime Library(CRT)의 함수를 호출하면 안 됩니다. CRT 함수들 중 일부는 내부적으로 DLL을 로드할 수 있으므로, 이러한 함수를 DllMain에서 호출하면 데드락(deadlock)이 발생할 수 있습니다.

스레드 생성: DllMain에서 스레드를 생성하면 안 됩니다. 새 스레드의 DllMain 호출이 완료되기 전에는 DLL 로딩이 완료되지 않으므로, 이로 인해 데드락이 발생할 수 있습니다.

따라서 초기화 작업이 이러한 제약을 준수하면 DllMain에서 수행해도 괜찮습니다. 그렇지 않다면, 별도의 초기화 함수를 제공하는 것이 좋습니다. 이 초기화 함수는 DLL 사용자가 명시적으로 호출할 수 있도록 해야 합니다.

컴퓨터교육 전공 관련 질문 모범답변...

... 배열과 포인터는 서로 관련이 있어 배열의 이름은... 웹 개발, 데이터베이스 관리, 게임 개발 등 다양한... y); } int main() { // 객체 생성 및 초기화 struct Point myPoint = {10...

c,c++언어를 공부해야하나요?

... 자바java와 C#은 C++언어를 지원하는 개발툴입니다. 이점... 그 구조화의 핵심은 기능단위로 묶어 코드(명령어)를 만들어낼수있는 함수가 핵심입니다. 함수는 필요한...

할려면 어떤 걸 먼저 해야 될까요 ?

c, c++, vc++, java 는 할 줄 알아요. 엑셀 사용할려고 하는데 엑셀에서 없는 기능을 만들려고 vba 를 봤는데..... 개발자로서 접근 코드가 쉽게 보이게 하려면 과다한...

C/C++가 뭔가요?

... 언어와 C++(객체지향언어)는 범용 프로그래밍언어라고 하여 많이 쓰이며 특히 하드웨어의 제어와 관련된... Win32 DLL개발하고 사용할 수 있습니다. MFC 를...

c언어 c++ 공부하는 법... 좀.. 알려주세요

... 언어와 C++(객체지향언어)는 범용 프로그래밍언어라고 하여 많이 쓰이며 특히 하드웨어의 제어와 관련된... Win32 DLL개발하고 사용할 수 있습니다. MFC 를...

[VS C++] DLL파일 생성 오류.

... 프로그램 개발 환경 -Windows 7 UltimateK x86 -Visual... APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call... dll 파일의 함수 구현부가 정의된 dll_function.cpp...

자바 예외처리 관련 문제입니다.^^

... 기능을 사용하지 않을 수가 없다는 것이다. 자바나 C++의 라이브러리에 포함된 클래스 중에서 특히 입출력이나 통신과 관계되는 클래스들의 멤버 함수들...

Microsoft Visual C++ Runtime Library...

... 기본적인 일부 기능이 파일 공유 메커니즘을 통해... 제품에서는 개발 환경 내에서 대상 속성을... 오류와 관련되지 않은 시나리오에 대한 피드백 수집을...