本人最近学习Hook技术,照着http://www.vccode.net/forum_view.asp?forum_id=16&view_id=2216中的例子写了一个全局的鼠标钩子程序,不过例子好象是在VC6.0下写的,而我是在.NET2005下照着做的,编译是通过了,但是链接时总是出现错误,如下MouseHooker.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: virtual __thiscall Cmousehook::~Cmousehook(void)" (__imp_??1Cmousehook@@UAE@XZ),该符号在函数 "public: virtual __thiscall CMouseHookerDlg::~CMouseHookerDlg(void)" (??1CMouseHookerDlg@@UAE@XZ) 中被引用
MouseHookerDlg.obj : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: virtual __thiscall Cmousehook::~Cmousehook(void)" (__imp_??1Cmousehook@@UAE@XZ)
MouseHookerDlg.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: __thiscall Cmousehook::Cmousehook(void)" (__imp_??0Cmousehook@@QAE@XZ),该符号在函数 "public: __thiscall CMouseHookerDlg::CMouseHookerDlg(class CWnd *)" (??0CMouseHookerDlg@@QAE@PAVCWnd@@@Z) 中被引用
MouseHookerDlg.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: int __thiscall Cmousehook::starthook(struct HWND__ *)" (__imp_?starthook@Cmousehook@@QAEHPAUHWND__@@@Z),该符号在函数 "protected: virtual int __thiscall CMouseHookerDlg::OnInitDialog(void)" (?OnInitDialog@CMouseHookerDlg@@MAEHXZ) 中被引用
E:\My projects\Visual Studio Projects\MouseHooker\Debug\MouseHooker.exe : fatal error LNK1120: 3 个无法解析的外部命令这是怎么回事,是不是在2005中HOOK的开发有变???急~~~~~请达人给予诊治,十分感谢!!!
MouseHookerDlg.obj : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: virtual __thiscall Cmousehook::~Cmousehook(void)" (__imp_??1Cmousehook@@UAE@XZ)
MouseHookerDlg.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: __thiscall Cmousehook::Cmousehook(void)" (__imp_??0Cmousehook@@QAE@XZ),该符号在函数 "public: __thiscall CMouseHookerDlg::CMouseHookerDlg(class CWnd *)" (??0CMouseHookerDlg@@QAE@PAVCWnd@@@Z) 中被引用
MouseHookerDlg.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: int __thiscall Cmousehook::starthook(struct HWND__ *)" (__imp_?starthook@Cmousehook@@QAEHPAUHWND__@@@Z),该符号在函数 "protected: virtual int __thiscall CMouseHookerDlg::OnInitDialog(void)" (?OnInitDialog@CMouseHookerDlg@@MAEHXZ) 中被引用
E:\My projects\Visual Studio Projects\MouseHooker\Debug\MouseHooker.exe : fatal error LNK1120: 3 个无法解析的外部命令这是怎么回事,是不是在2005中HOOK的开发有变???急~~~~~请达人给予诊治,十分感谢!!!
解决方案 »
- 进行窗口切换然后再切换回去,程序界面不重绘。。。
- isapi高分求救
- CFtpFileFind获取远程文件的修改时间老是不对!急!急!急!急!
- WIN2K AS、VC6中,调用RegisterServiceProcess时出错了,代码如下:
- 如何得到进程 在硬盘上的路径
- CSDN论坛助手 重出江湖!!!!爽!爽!!爽!!知道什么是极速吗?快来体验一下了。[周一早8:00发布]
- 小问题:怎样 控制 弹出的 提示对话框 在屏幕上的位置????高分急等!!!!
- ActiveSplash怎么不能使用啊
- windows 核心编程 中Optex的一个问题.
- VC6 在InitInstance中第一次调用AfxOleInit异常报错
- Dll输出类问题
- 请教删除listctrl控件中的多项.
我在项目属性里没有找到你说的LINK项啊,我用的是.NET2005中文版,那项对应的中文名称是什么?连接器这一项里面有个子项"输入",里面有个"延迟加载的DLL",是不是这一项啊
使用你的方法问题解决了,谢谢
------------------------GlobalV.h------------------------------
#include <windows.h>
#include "string.h"
#include "stdio.h" HHOOK hHook;//鼠标钩子句柄
CPoint point;//鼠标位置信息
CChildView *pView; // 鼠标钩子函数用到的输出窗口指针 //全局函数
LRESULT CALLBACK MouseProc (int nCode, WPARAM wParam, LPARAM lParam)
{//是鼠标移动消息
if(wParam == WM_MOUSEMOVE || wParam == WM_NCMOUSEMOVE)
{
point=((MOUSEHOOKSTRUCT*)lParam)->pt; //取鼠标信息
pView->Invalidate(); //窗口重画
}
return CallNextHookEx(hHook,nCode,wParam,lParam); //传递钩子信息
}
----------------------------------------------------------------------------------ChildView.cpp----------------------#include "stdafx.h"
#include "MouseHook.h"
#include "ChildView.h"
#include "GlobalV.h"#ifdef _DEBUG
#define new DEBUG_NEW
#endif// CChildViewCChildView::CChildView()
{
pView=this;//获得输出窗口指针
hHook=SetWindowsHookEx(WH_MOUSE,MouseProc,0,GetCurrentThreadId());
}CChildView::~CChildView()
{
if(hHook)
UnhookWindowsHookEx(hHook);
}BEGIN_MESSAGE_MAP(CChildView, CWnd)
ON_WM_PAINT()
END_MESSAGE_MAP()// CChildView 消息处理程序BOOL CChildView::PreCreateWindow(CREATESTRUCT& cs)
{
if (!CWnd::PreCreateWindow(cs))
return FALSE; cs.dwExStyle |= WS_EX_CLIENTEDGE;
cs.style &= ~WS_BORDER;
cs.lpszClass = AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS,
::LoadCursor(NULL, IDC_ARROW), reinterpret_cast<HBRUSH>(COLOR_WINDOW+1), NULL); return TRUE;
}void CChildView::OnPaint()
{
CPaintDC dc(this); // 用于绘制的设备上下文
char str[256];
sprintf(str,"x=%d,y=%d",point.x,point.y); //构造字符串
dc.TextOut(0,0,(CString)str); //显示字符串
// 不要为绘制消息而调用 CWnd::OnPaint()
}------------------------------------------------------------------------
报错如下:
ChildView.obj : error LNK2001: 无法解析的外部符号 "struct HHOOK__ * hHook" (?hHook@@3PAUHHOOK__@@A)
ChildView.obj : error LNK2001: 无法解析的外部符号 "class CChildView * pView" (?pView@@3PAVCChildView@@A)
ChildView.obj : error LNK2001: 无法解析的外部符号 "class CPoint point" (?point@@3VCPoint@@A)
具体两种方式:
_declspecl(dellexport)
或
定义一个.def文件 加入工程
具体办法楼主找找资料