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
[3360] DLL에 소스에 문제가 있나여??
[] 3478 읽음    2000-04-19 00:00
저기 아래서 질문한 키보드 후킹을 위해서 DLL을 만들었습니다..

함수는 세개정도인데.. 아래 두개의 함수가 있는데..

하나는 GetProcAddress함수로 읽어오면 함수 포인터가 넘어오는데

하나는 NULL이 넘어옵니다. (SetButton함수하고, SetHookKey함수가  문제죠..)

DLL함수는 아래 소스가 있고

호출하는 루틴은 더 아래에 올리겠습니다.

__declspec(dllexport) void SetHookKey(HHOOK hookkey)
{
    hHookKey = hookkey;
}
__declspec(dllexport) void SetButton(char * s1, char * s2)
{
    file1 = s1;
    file2 = s2;
}

//---------------------------------------------------------------------------
__declspec(dllexport) LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{

    if(nCode < 0)
      return CallNextHookEx(hHookKey , nCode, wParam, lParam);

//    sprintf(buf, "W = %04x , L = %04x ", wParam , lParam);
//  Main->Edit1->Text = buf;


    if(lParam == 0x670001 && file1 != "")
    {
        ShowMessage(file1);
        ShellExecute(0, "open", file1.c_str(), "", "", SW_SHOWNORMAL);
    }
    else if(lParam == 0x6b0001 && file2 != "")
    {
        ShowMessage(file2);
        ShellExecute(0, "open", file2.c_str(), "", "", SW_SHOWNORMAL);
    }
//    ShowMessage(buf );

  return CallNextHookEx(hHookKey , nCode, wParam, lParam);
}

여기까지가 DLL소스이고

클라이언트에서 호출 루틴은 다음과 같습니다.

    hinstDLL = LoadLibrary((LPCSTR)"HookSys.dll");

    if(hinstDLL == NULL)
    {
        ShowMessage("DLL Load Error");
        return;
    }


    HOOKPROC keyproc =(HOOKPROC) GetProcAddress(hinstDLL, "KeyboardProc");

//    hHookKey  = SetWindowsHookEx(WH_KEYBOARD, (HOOKPROC) KeyboardProc, NULL, GetCurrentThreadId());
    hHookKey  = SetWindowsHookEx(WH_KEYBOARD, keyproc , hinstDLL, 0);


    void (CALLBACK*sethhook)(HHOOK ) =  ( void (CALLBACK *)(HHOOK) )GetProcAddress(hinstDLL, "SetHookKey");


    if(sethhook != NULL)
        sethhook(hHookKey);


keyproc는 제대로 넘어와서 후킹은 잘되는데
sethhook은 NULL로 넘어옵니다.

그래서 keyproc함수에서 내부에서

CallNextHookEx를 호출할때 필요한 Hook Instance를 셋팅할 수가 없는데..

왜 그럴까요?

DLL을 만드는데 문제가 있는걸까요??



고수님들의 조언 부탁합니다.


PS.
참고로 지금 제 노트북의 인터넷 버튼 셋팅 프로그램을 만들고 있습니다.

일본산이라 한글 윈도즈에서 인터넷 버튼을 사용 할 수 없거든요.

+ -

관련 글 리스트
3360 DLL에 소스에 문제가 있나여?? 3478 2000/04/19
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.