나는 내가이 내가 지금까지 올라와있다 무엇 시스템 이벤트의 모든 (프로세스 생성, 파괴, 등) 를 모니터링하는 데 사용할 수있는 DLL을 만들려고하고 있어요 내 DLL의왜 SetWindowsHookEx가 후크 프로 시저를 수락하지 않습니까? 진입 점 -</p> <p><strong>의 DLL 주요</strong>을 :
// dllmain.cpp : Defines the entry point for the DLL application.
#include "stdafx.h"
#include "CBTHook.h"
BOOL APIENTRY DllMain(HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
CBT::CBTHook::SetHandle(hModule);
break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
DLL 헤더
//Dll header file - function signatures
#ifdef CBTHOOKDLL_EXPORTS
#define CBTHOOKDLL_API __declspec(dllexport)
#else
#define CBTHOOKDLL_API __declspec(dllimport)
#endif
namespace CBT
{
class CBTHook
{
public:
CBTHook();
static void SetHandle(HINSTANCE handle);
void InstallHook();
void UnistallHook();
LRESULT CALLBACK HookProcedure(int nCode, WPARAM wparam, LPARAM lparam);
~CBTHook();
private:
static HINSTANCE currentProcessHandle;
HOOKPROC hkprcSysMsg;
static HHOOK hookID;
};
}
CB 파일
// CBTHook.cpp : Defines the exported functions for the DLL application.
//
#pragma once
#include "stdafx.h"
#include "CBTHook.h"
#include <Windows.h>
#include <iostream>
using namespace std;
namespace CBT
{
CBTHook::CBTHook()
{
}
void CBTHook::SetHandle(HINSTANCE handle)
{
currentProcessHandle = handle;
}
void CBTHook::InstallHook()
{
hookID = SetWindowsHookEx(WH_CBT,HookProcedure, currentProcessHandle, 0);
}
void CBTHook::UnistallHook()
{
UnhookWindowsHookEx(hookID);
}
LRESULT CALLBACK CBTHook::HookProcedure(int nCode, WPARAM wparam, LPARAM lparam)
{
if (nCode >= 0)
{
switch (nCode)
{
case HCBT_CREATEWND:
cout << "Created!~" << endl;
break;
case HCBT_DESTROYWND:
cout << "Destroied!~" << endl;
break;
default:
cout << "sth else" << endl;
break;
}
}
else
return CallNextHookEx(hookID, nCode, wparam, lparam);
}
}
THook.cpp 이제 문제는 내가 읽고 문제의 함수의 반환 값이 올바른지 인터넷에서 본대로 SetWindowsHookEx
늘 멀리 HookProcedure
반면에 동의한다는 것입니다.
내가 오류 얻을 :
오류 C3867 : 'CBT :: CBTHook :: HookProcedure': 함수 호출에 인수 목록이 없습니다; 사용 '& CBT :: CBTHook :: HookProcedure은'하나 문제를 해결하기 위 나던에 의해 제안하고 회원
에 대한 포인터를 만들 수 있습니다!
무엇이 여기에 있습니까?
? 이 경우 나는 링커 오류가 발생했습니다! : ############### ##################### ########### 오류 LNK2001 : 해결되지 않은 외부 기호 "개인 : 정적 구조체 HINSTANCE__ * CBT :: CBTHook :: currentProcessHandle"(? currentprocesshandle @ CBTHook @ CBT @@PAUHINSTANCE__ @@) ########################### ###### 1> CBTHook.obj : 오류 LNK2001 : 해결되지 않은 외부 기호 "private : 정적 구조체 HHOOK__ * CBT :: CBTHook :: hookID"(? hookID @ CBTHook @ CBT @@ 0PAUHHOOK __ @@ A) – Breeze
클래스 메서드가 아니거나 정적 클래스 메서드가 될 필요가 SetWindowsHookEx에 전달하는 함수입니다. 다른 모든 것은 당신의 결정입니다. 오류가 발생하면 업데이트 된 코드를 게시하십시오. – nvoigt
나는 클래스를 만들지 않으므로 메서드를 어떻게 작성해야 DLL을 만들고 사용할 수 있습니까? 나는 여기 지시를 따른다 : http : //msdn.microsoft.com/en-us/library/ms235636.aspx 그리고 내가 나의 클래스에서 그 기능을 얻으려고 할 때, 나는 어디에 놓을 지 모른다? !! – Breeze