如何防止一个类重复注册?

Sandrer 2008-06-10 11:13:37
我在用VS2005制作一个DLL,在里面有个输出函数:
DWORD WINAPI InitClass(HINSTANCE hInst, DWORD flags)


其中参数hInst是调用的程序的实例句柄
此函数中会注册一个类(就像Comctl32.dll模块中的InitCommonControls函数一样,调用它就注册类)

现在的问题是,当我两个程序分别调用此函数的时候,两个程序都提示注册成功(我用MessageBox弹出提示)

我试过用GetClassInfoEx函数来获得类信息,可惜还是一样两个程序调用都注册两次。

有什么办法让类只注册一次???




PS:表达能力有限,如果我表达得不够清晰的话请留言。。。。
...全文
164 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Sandrer 2008-06-12
  • 打赏
  • 举报
回复
看来只能用互斥体的办法了~

回8楼:
我创建的类,hInstance没有填充,填充后注册失败......
Sandrer 2008-06-11
  • 打赏
  • 举报
回复
能否详细解释一下~最好提供一下代码!!
我已经找了两天了,还是没找到相关资料,MSDN没有介绍~
K行天下 2008-06-11
  • 打赏
  • 举报
回复


#ifndef
#define

#endif
pgmsoul 2008-06-11
  • 打赏
  • 举报
回复
注册两次没什么问题吧,就应该这样.就算是DLL中的全局变量在不同的进程中,也是两个不同的变量.
iu_81 2008-06-11
  • 打赏
  • 举报
回复
WNDCLASSEX wc;
wc.cbSize=sizeof(wc); //Windows用来进行版本检查的,与窗口特征无关
GetClassInfoEx(hinst,”XXXXXX”,&wc);
// hinst—定义窗口类XXXXXX的模块的句柄,如为系统定义的窗口类(如:EDIT、BUTTON)则hinst=NULL.。
wc.lpszClassName = “YYYYYYY”;//窗口类的名字
wc.hbrBackGround = CreateSolidBrush(RGB(0,0.0));//改变背景刷
wc.lpfnWndProc = NewWndProc;//改变窗口函数
……
if(hinst!=NULL)
{
RegisterClassEx(&wc);// 注册新窗口类
}
leo201592 2008-06-11
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 Treazy 的回复:]
用一个Mutex

C/C++ codeHANDLE hMutexOneInstance=::CreateMutex(NULL,false, _T("ONCE"));boolAlreadyRunning=(::GetLastError()==ERROR_ALREADY_EXISTS||::GetLastError()==ERROR_ACCESS_DENIED);if(hMutexOneInstance)
{
::CloseHandle(hMutexOneInstance);
}if(AlreadyRunning)
{
...returntrue;//退出}
[/Quote]
koc_now 2008-06-11
  • 打赏
  • 举报
回复
专家坐阵, 有问必答
http://www.kingofcoders.com
Treazy 2008-06-11
  • 打赏
  • 举报
回复
用一个Mutex


HANDLE hMutexOneInstance = ::CreateMutex(NULL, false, _T("ONCE"));

bool AlreadyRunning = (::GetLastError() == ERROR_ALREADY_EXISTS ||
::GetLastError() == ERROR_ACCESS_DENIED);
if(hMutexOneInstance)
{
::CloseHandle(hMutexOneInstance);
}
if(AlreadyRunning)
{
...
return true; //退出
}
太乙 2008-06-10
  • 打赏
  • 举报
回复
用单例模式!!
Sandrer 2008-06-10
  • 打赏
  • 举报
回复
附带提一下,我是用RegisterClassEx函数注册的类

65,179

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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