描述:
我做了一个自动化的服务端,我想向客户端开放一个关闭服务端的接口,例如Quit
在服务端的Quit接口中我是这样写的:
SendMessage(AfxGetMainWnd()->m_hWnd, WM_CLOSE , NULL, NULL);
在客户端我是这样调用的:
m_tTest.CreateDispatch("AutomationTest.Document");
m_tTest.Quit();
m_tTest.ReleaseDispatch();
但每次运行到m_tTest.Quit();时,服务端虽然关闭了,但是却弹出下列两个提示框:
1。第一个提示框
---------------------------
DDE Server Window: AUTOMA~1.EXE - 应用程序错误
---------------------------
"0x77a91955" 指令引用的 "0xdddddde5" 内存。该内存不能为 "read"。
要终止程序,请单击“确定”。
要调试程序,请单击“取消”。
---------------------------
确定 取消
---------------------------
2。第二个提示框
---------------------------
Client
---------------------------
远程过程调用失败。
---------------------------
确定
---------------------------
解决方案1:
AfxGetMainWnd()->PostQuitMessage(0);
解决方案2: m_tTest.CreateDispatch("AutomationTest.Document");
m_tTest.Quit(); // 执行完毕后服务器关闭
m_tTest.ReleaseDispatch(); // 服务器已经被析构了,再释放当然出错
...
Sleep(3000); // 让客户端有时间释放自己,然后自己再关闭
SendMessage(AfxGetMainWnd()->m_hWnd, WM_CLOSE , NULL, NULL);