【发布时间】:2014-12-20 11:32:17
【问题描述】:
我的 DLL
#include <windows.h>
#include <vector>
#include "Funkcje.h"
WNDPROC originalProc;
LRESULT CALLBACK myHookProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
BOOL WINAPI DllMain(
HINSTANCE hinstDLL,
DWORD fdwreason,
LPVOID lpReversed)
{
switch (fdwreason)
{
case DLL_PROCESS_ATTACH:
WNDPROC originalProc = SetWindowLongPtr(getToplevelWindows()[1], GWLP_WNDPROC, (LONG_PTR)myHookProc);
break;
}
return TRUE;
}
LRESULT CALLBACK myHookProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
LRESULT originalResult = originalProc(hWnd, uMsg, wParam, lParam); // call original first
if (uMsg == WM_PAINT)
{
PAINTSTRUCT ps;
HDC hdc = GetDC(hWnd);
TextOut(hdc, 150, 150, L"TEST", 4);
ReleaseDC(hWnd, hdc);
}
return originalResult;
}
Funkcje.h http://pastebin.com/dc5t5H8s
我遇到了 (LONG_PTR)myHookProc 的问题 我的编译器说错误 C2440: 'initializing' : cannot convert from 'LONG' to 'WNDPROC' 我不知道我现在能做什么。如果没有 (LONG_PTR),我的编译器说他不能从 'LRESULT' 转换为 'LONG'
【问题讨论】:
-
您应该显式地转换 SetWindowLongPtr 的返回值:
originalProc = (WNDPROC)SetWindowLongPtr(getToplevelWindows()[1], GWLP_WNDPROC, (LONG_PTR)myHookProc);。此外,如果您想稍后访问 originalProc,则不应在case DLL_PROCESS_ATTACH...的上下文中创建另一个变量...
标签: c++ c visual-c++