关于在com(dll)内部生成一个窗体,调用接口关闭内部窗体时候外部调用程序也关闭的问题!
问题描述:
现在写了一个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接口,外部调用程序也跟着退出。
如何才能做到既释放硬件资源,又不使得外部程序退出
请教我这个思路是否有问题,是不是还有更好的解决办法,