关于在com(dll)内部生成一个窗体,调用接口关闭内部窗体时候外部调用程序也关闭的问题!

httpaspjspphp 2009-12-22 03:58:31
问题描述:
现在写了一个com,在com内部注册了一个窗体,
;

//////////////////////////////

MSG msg={0};
WNDCLASS wc;
USES_CONVERSION;

ZeroMemory(&wc, sizeof wc);
ghInst = hInstance;//wc.hInstance;
wc.lpfnWndProc = WndProc;
wc.lpszClassName = CLASSNAME;
wc.lpszMenuName = NULL;//MAKEINTRESOURCE(IDR_MENU);
wc.hCursor = NULL;//LoadCursor(NULL, IDC_ARROW);
wc.hIcon = NULL;//LoadIcon(hInstC, MAKEINTRESOURCE(IDI_TICKER));
if(!RegisterClass(&wc))
{
msg("wrong");
}

// Create the main window. The WS_CLIPCHILDREN style is required.
m_hwnd = CreateWindow(CLASSNAME, APPLICATIONNAME,
WS_OVERLAPPEDWINDOW | WS_CAPTION | WS_VISIBLE|WS_CLIPCHILDREN,
CW_USEDEFAULT, CW_USEDEFAULT,
100, 100,
0, 0, ghInst, 0);


ShowWindow(m_hwnd, SW_SHOW);
UpdateWindow(m_hwnd);


现在利用这个窗体的消息循环处理函数WndProc来处理外部调用com的一些命令要求

现在的问题是当外部命令发送到WM_QUIT时候外部的调用程序也退出了

STDMETHODIMP CCardPlayer::Uninit()
{

PostMessage(m_hwnd,WM_CLOSE,NULL,NULL);


return S_OK;
}

PostMessage(m_hwnd,WM_CLOSE,NULL,NULL);

我的目的是只想把这个窗体来注销,而调用它的外部程序并不退出

因为这个窗体消息循环中使用到一个硬件资源,而这个硬件资源是独占的,这个硬件资源不能很好的释放,
在exe中也只能实现一次使用,然后退出在重新打开使用,所以我想了这个办法将这个硬件资源放在com中,
但是现在的问题是外部程序一旦调用Uninit接口,外部调用程序也跟着退出。

如何才能做到既释放硬件资源,又不使得外部程序退出

请教我这个思路是否有问题,是不是还有更好的解决办法,





...全文
116 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
httpaspjspphp 2009-12-29
  • 打赏
  • 举报
回复
谢谢楼上各位的回答
但是都无法解决问题
最后使用进程控制解决
mengde007 2009-12-23
  • 打赏
  • 举报
回复
因为这个dll的窗口需要依靠主程序的消息循环机制;想当与主程序受到了WM_QUIT消息,所以退出了;
可以自定义一个消息;让dll窗口来处理;
心留 2009-12-23
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 mengde007 的回复:]
因为这个dll的窗口需要依靠主程序的消息循环机制;想当与主程序受到了WM_QUIT消息,所以退出了;
可以自定义一个消息;让dll窗口来处理;
[/Quote]

同意
httpaspjspphp 2009-12-22
  • 打赏
  • 举报
回复
PostMessage(m_hwnd,WM_QUIT,NULL,NULL);
结果也是一样

15,471

社区成员

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

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