【求救】常规dll中怎么进行消息映射,以及句柄问题

abcbit 2004-04-01 11:25:07
我的大致思路是在vb中调用他的函数,这些功能函数不想用类来封装
比如:
int _stdcall Ser_SetServerType(int iServerType)
{
......
return m_ServerType;
}

使用dll是第二种,常规DLL
系统默认建立一个类class CSerDllApp : public CWinApp

想用自定义的消息映射
#define WM_MYCOMMAND WM_USER+1

BEGIN_MESSAGE_MAP(CSerDllApp, CWinApp)
......
ON_MESSAGE(WM_MYCOMMAND,OnMyCommand) //自定义的消息WM_MYCOMMAND
......
END_MESSAGE_MAP()

这个OnMyCommand是自定义的,我也把他作为全局的了(当然也可以放在CSerDllApp类中吧)
void OnMyCommand(WPARAM wParam, LPARAM lParam)
{ }

在某个函数中调用
ServerSetMessage(WM_MYCOMMAND,NULL);
函数原型:
ServerSetMessage(UINT nMessage,HWND hWnd)
由于这个dll不知道怎么指定句柄,我这里就设为NULL,或者传递VB控件的句柄

但是现在消息映射那地方出错:
error C2440: 'type cast' : cannot convert from 'void (__cdecl *)(unsigned int,long)' to 'long (__thiscall CWnd::*)(unsigned int,long)'
大概是基类不支持吧

问题是:
如何进行消息映射实现我的功能,
还有就是句柄相当于WINDOWS系统的全局变量吧~从VB传递过来的句柄能在VC中对应吧?

所学不多,望解
谢谢!!
...全文
44 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
abcbit 2004-04-02
  • 打赏
  • 举报
回复
嗯,我接着说清楚点,真希望快点解决~

在VB工程中调用这个DLL文件

创建常规dll工程CSerDll,系统自动生成class CSerDllApp : public CWinApp
我想在dll中进行消息映射:WM_MYCOMMAND --》OnMyCommand
在响应文件添加:
#define WM_MYCOMMAND WM_USER+1

afx_msg void OnMyCommand(UINT nID, LPARAM lParam);

BEGIN_MESSAGE_MAP(CSerDllApp, CWinApp)
......
ON_MESSAGE(WM_MYCOMMAND,OnMyCommand)
......
END_MESSAGE_MAP()

void CSerDllApp::OnMyCommand(WPARAM wParam, LPARAM lParam)
{
AfxMessageBox("OnMyCommand");
}

dll的接口函数一般如下定义:
bool _stdcall Ser_InitDrv(HWND pWnd)
我想在这个函数中传递消息响应函数:
PostMessage(NULL, WM_MYCOMMAND,0,0);
(第一个参数是句柄,按理说是这个DLL的句柄,但DLL有吗?所以我设为NULL,也不知道会有什么不好的影响)

或者PostThreadMessage(GetCurrentThreadId(), WM_MYCOMMAND,0,0);
(GetCurrentThreadId()是DLL的线程ID吗?)
但结果都不行,在VB程序中调用这个函数(连接DLL这些都是成功的),没有弹出“OnMyCommand”

我在DLL中添加一个dialog,把代码做了相应处理也是不行,消息总没传过去。

不知道哪里出问题了...
abcbit 2004-04-02
  • 打赏
  • 举报
回复
我一顶再顶!
Jiaft3000 2004-04-02
  • 打赏
  • 举报
回复
好像没有说清楚,呵呵。顶一下!
-- 不高不低手
薛定谔之死猫 2004-04-01
  • 打赏
  • 举报
回复
http://expert.csdn.net/Expert/topic/2814/2814574.xml?temp=.5705835
abcbit 2004-04-01
  • 打赏
  • 举报
回复
自己顶!!

现在消息映射还是可以了,还是不响应
用PostThreadMessage、PostMessage都不行~

.............
101monster 2004-04-01
  • 打赏
  • 举报
回复
呵呵,UP!
http://expert.csdn.net/Expert/topic/2814/2814574.xml?temp=.5705835
rivershan 2004-04-01
  • 打赏
  • 举报
回复
__cdecl是C/C++和MFC程序默认使用的调用约定

VB要__stdcall~

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧