要怎样加才可以顺利触发连接点事件呢?我必须得用多线程的,而且这个控件
在Activx control Test Container中运行得很正常
如果在网页上,我不用多线程,也是可以很正常的触发事件的
我的代码如下:STDMETHODIMP CRTX::connectToServer()
{
if(m_isConnect)
return S_FALSE;
sockaddr_in cli;
cli.sin_addr.s_addr=inet_addr("66.1.33.55");
cli.sin_family=AF_INET;
cli.sin_port=htons(9020);
//创建socket
m_clisock=socket(AF_INET,SOCK_STREAM,0);
if(connect(m_clisock,(sockaddr *)&cli,sizeof(cli)) )
{
return S_FALSE;
}
m_isConnect = true;
DWORD i = 1;
this->ListenMessage1((void *) this);
HANDLE hThread=CreateThread(NULL,0,&ListenMessage,this,0,&i) ;
return S_OK;
}DWORD WINAPI ListenMessage(void *p)
{
CRTX* rtx = (CRTX *)p;
SOCKET clisock;
clisock= rtx->m_clisock;
CTransforProtocol protocol;
int a= 1;
while (true){
a = protocol.receive(clisock);
rtx->m_clRecvMess.setReceiveProtocol(protocol);
a = rtx->m_clRecvMess.receive(clisock);
//  rtx->fire();   
rtx->Fire_OnClose();    
if(a < 0)
  break;      
}
rtx->m_isConnect = false;
if(a < 0)
rtx->Fire_OnClose();    
return 1;

}
Fire_Onclose() 是用ATL向导生成的一个事件函数麻烦那位大虾给解释一下,或者给出一个解决方案我的目的就是在接收到服务器发过来的消息时马上通知网页,然后网页中的VBScript作相应的处理

解决方案 »

  1.   

    你用工作线程发消息给主线程(初始化控件的那个),让主线程去调用连接点代理函数(FIRE_ON*)试试.
      

  2.   

    现成里加AFX_MANAGE_STATE(AfxGetStaticModuleState())
      

  3.   

    怎么加?不是很明白,加到线程函数里面报错,未定义
    AFX_MANAGE_STATE(AfxGetStaticModuleState())
      

  4.   

    我有有窗口的控件通过消息传送可以实现第二个线程触发连接点事件,并可正常用于网页上
    但是在invisible的控件中又怎么实现呢?
      

  5.   

    create an invisible window
      

  6.   

    我已经解决了这个问题,具体的解决方案见
    http://support.microsoft.com/kb/196026/
    不过,只通过发送消息(也就是要创建一个窗口) 这个方法才
    他上面提供的另一个方法,在网页上是不起作用的
    谢谢yanedanny(守望者) 的提示
      

  7.   

    jiangsheng(蒋晟.Net[MVP]) 的提示也很好,不过那时我已经解决了,所以只能给10分了:)