C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[36087] [디버깅] DLL이 Attach나 Detach 되는 시점에 특정한 작업 수행을 하려하는데 ...
박재현 [aardwolf] 1414 읽음    2004-07-05 19:39
빌더에서 DLL Wizard 기능을 이용하여 DLL을 하나 만들었습니다.
만들당시 옵션은 "C++ Source type, Use VCL, VC++ Style DLL"을 선택하였습니다.

근데 이렇게 해서 생성한 DLL이라는 놈을 응용프로그램에서 불러서 사용하는데 DLL 로딩과 내부함수 호출은 정상적으로 이루어집니다.
헌데 DLL이 "Attach"되거나 "Detach"되는 시점에 특정한 작업을 수행하기 위해 DllMain 함수내에 코드를 넣었지만 실상 DLL이 Attach되거나 Detach될 때 삽입된 코드가 수행이 되질 않습니다.
그런데 DllMain을 DllEntryPoint 로 바꿔주면 원하는 작업이 수행됩니다.
무슨 이유인가요?
DllMain 형태로 삽입된 코드를 동작시키기 위해서는 다른 방법이 있는건가요?
궁금합니다. 조언부탁드립니다.
아래에 사용되어진 코드를 간단히 적어봅니다. 참고하시기 바랍니다.

/////////////////////////////////////////////////////////////////////////////////////
#include <vcl.h>
#include <windows.h>

TForm1 *MainForm;

BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fwdreason, LPVOID lpvReserved)
{
    switch(fwdreason){
        case DLL_PROCESS_ATTACH :
        case DLL_THREAD_ATTACH :
            Application->MessageBoxA("Dll Attach", "Message", MB_OK);
            if(MainForm == NULL){
                MainForm = new TForm1(NULL);
            }
            break;
        case DLL_PROCESS_DETACH :
        case DLL_THREAD_DETACH :
            Application->MessageBoxA("Dll Detach", "Message", MB_OK);
            if(MainForm != NULL){
                delete MainForm;
                MainForm = NULL;
            }
            break;
    }
    return 1;
}
//---------------------------------------------------------------------------

+ -

관련 글 리스트
36087 [디버깅] DLL이 Attach나 Detach 되는 시점에 특정한 작업 수행을 하려하는데 ... 박재현 1414 2004/07/05
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.