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
[25702] [질문]DLL 안에서의 이벤트 대기..도와주세요~
김민식 [mspower] 713 읽음    2003-05-21 17:12

SetEvent, WaitForMultipleObjects  관련해서 질문 드립니다.

현재 세개의 부분으로 나누어져 있는데요.

1. Lib 프로젝트

    * 헤더파일
   
        extern HANDLE *HandleRingEvent;

        void __stdcall LCreateHandle(void);
        void __stdcall LCloseHandle(void);
        int  __stdcall WaitRingEvent(int Channel);
        int  __stdcall SetRingEvent(int Channel);

    * CPP 파일
       
        int TotalChannels = 120;

        HANDLE *HandleRingEvent;

        void __stdcall LCreateHandle(void)
        {
                int i;

                HandleRingEvent = new HANDLE[TotalChannels];

                for(i = 0; i < TotalChannels; i++){
                    HandleRingEvent[i] = CreateEvent(NULL, FALSE, FALSE, NULL);
            }
        }


        void __stdcall LCloseHandle(void)
        {
                int i;

                for(i=0;i<TotalChannels;i++){
                    CloseHandle(HandleRingEvent[i]);
                }

                delete []HandleRingEvent;
        }

        int  __stdcall WaitRingEvent(int Channel)
        {
                HANDLE hEvents[] = { HandleRingEvent[Channel]};
                DWORD Ret;

                Ret = WaitForMultipleObjects(1, hEvents, FALSE, INFINITE);
                return Ret;

        }

        int  __stdcall SetRingEvent(int Channel)
        {
                SetEvent(HandleRingEvent[Channel]);
        }

2. DLL 파일

    extern "C" __declspec(dllexport) int __stdcall DllFunc1(void)
    {
            WaitRingEvent(1);
    }
   
3. 테스트 실행파일

    1. DLL 로딩.
        DllInstance = LoadLibrary("Dll.dll");
            CreateChild = (int(__stdcall *)(void))GetProcAddress(DllInstance, "DllFunc1");

    2. Lib 의 LCreateHandle(void) 호출.
   
    3. 첫번째 쓰레드에서 다음 실행.
   
        Form1->Memo1->Lines->Add("Waiting....");
            WaitRingEvent(1);
            Form1->Memo1->Lines->Add("Event arrived.");
   
        -. 정상으로 이벤트 수신후 메시지 출력되네요.
       
    4. 두번째 쓰레드에서 다음 실행
   
        Form1->Memo1->Lines->Add("Waiting....");
            Form1->CreateChild(); // DLL 함수 호출.. DLL 안에서는 WaitRingEvent(1); 으로 이벤트 대기
            Form1->Memo1->Lines->Add("Event arrived.");
           
            % 여기서 이벤트 대기가 되지 않네요. IDE 에서 실행하면
            HANDLE hEvents[] = { HandleRingEvent[Channel]}; <--- 이부분에서 에러가 나고요.
           

하나의 라이브러리에 있는 핸들(광역변수)을 사용하여 메인 프로그램에서 핸들을 생성하고, DLL 에서 이 핸들에 따른 이벤트

대기를, 나중에 메인프로그램에서 핸들 해제를 하고자 합니다.

메인 프로그램에서의 이벤트 대기는 잘 되는데, 왜 DLL 안에서는 안되는 것일까요?

고수님들의 도움 부탁드립니다.

요 부분때문에 프로젝트 개발이 중단된 상태네요. 요거이 안되면 그림을 다시 그려야하는 상황.ㅠ.ㅠ

꼭 도와주세용.~

감사합니다.



           
   
   
   
       

+ -

관련 글 리스트
25702 [질문]DLL 안에서의 이벤트 대기..도와주세요~ 김민식 713 2003/05/21
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.