这是调用dll的代码:HINSTANCE hInst;
hInst = LoadLibrary("C:\\Documents and Settings\\Administrator\\桌面\\dll\\keyboard2\\Debug\\keyboard2.dll");
typedef HHOOK (*ADDPROC)();
ADDPROC start = (ADDPROC)GetProcAddress(hInst,"Start");
if(!start)
{
AfxMessageBox("获取函数地址失败!");
return ;
}
start();dll中,声明了一个类,类中有构造函数、析钩、Start(),Stop()函数
我想在程序中动态调用Start函数可这样执行,老是提示“获取函数地址失败”请大家帮忙,谢谢
hInst = LoadLibrary("C:\\Documents and Settings\\Administrator\\桌面\\dll\\keyboard2\\Debug\\keyboard2.dll");
typedef HHOOK (*ADDPROC)();
ADDPROC start = (ADDPROC)GetProcAddress(hInst,"Start");
if(!start)
{
AfxMessageBox("获取函数地址失败!");
return ;
}
start();dll中,声明了一个类,类中有构造函数、析钩、Start(),Stop()函数
我想在程序中动态调用Start函数可这样执行,老是提示“获取函数地址失败”请大家帮忙,谢谢
解决方案 »
- 现有一个类似QQ截图的功能需要向大家求助!!!
- 求教!CListView的更新问题!
- 结构体数组的长度问题
- 关于实现窗口最小化、还原的问题
- 用什么组件可以建立与internet服务器的通信?
- [今天开始] 记录下整个成长的过程
- 请教:如何在桌面(屏幕)上层用鼠标画一个矩形?注意不能影响桌面本身,也就是桌面还是正常使用的。
- 写给ASP程序调用的com是否只能放在服务器上运行,放在本地可以吗?
- OPenCV里的一段混合高斯建模,为什么前景显示的非常好,背景显示不出来
- 搞软件工程的朋友们注意:谁有SmartDraw正式版能给我一个吗???
- 定时刷新屏幕的问题。
- 如何得到tabctrl下的一个tab页的dialog的句柄及其下的treectrl句柄
class CMyClassInDll : public IMyClassInDll
{
......
};
LPVOID PASCAL CreateObject()
{
return (LPVOID) new CMyClassInDll;
}
然后在要调用该DLL的模块里也include那个抽象基类的头文件,然后定义一个该抽象基类的指针:
IMyClassInDll *pObj;
加载DLL,获得从DEF里输出那个函数CreateObject(),怎么获得不说了,是一般方法了。
然后: pObj = (IMyClassInDll *)CreateObj();
OK啦,现在你可以通过 pObj->来使用CMyClassInDll类啦!最后要注意的是,好像用完后,
delete pObj会出错?我不清楚。反正你在IMyClassInDll里声明一个类似Release的函数,在该函数里delete this就成了!
这实际就是COM(至少是进程内组件)的C++实现的理论基础。是一个最简化版本的COM组件。