如何将cstring的对象作为sendmessage 的一个参数传递 ?谢谢

解决方案 »

  1.   

    如果在同一进程内消息传递,把CString 对象转换为 char * 指针传递估计可以。
      

  2.   

    没办法直接传递一个Csting 的对象吗?
      

  3.   

    CString是不能直接当作消息的参数传递。
    另外转成char*后可以传递,因为SendMessage和PostMessage里的参数类型是指针类型的。但是还得考虑传递这两个参数指针所指向对象的生命周期,比如你声明了一个局部变量,然后把它的指针作为PostMessage的参数发出去了,这样那边接收到并处理后就会出错,因为这时你的这个变量已经不存在了,这个指针已经是一个野指针了。如果是用SendMessage的还可以,因为它是阻塞的,只有等待消息处理函数处理完后再返回。
      

  4.   

    3楼 和 5楼说的没错,要考虑变量作用域问题,最好定义成类成员数据或全局数据,保证在操作过程中不出现对象被销毁的情况,否则会出现 5楼 所述问题。
    如果在同一个进程中,感觉还是自己动态分配内存,传递指针,之后在接收端还原回CString。
      

  5.   

    取指针就可以了。前提是注意Cstring的生命周期。
      

  6.   

    SendMessage(hwnd, WM_XXX, NULL, (LPARAM)(LPCTSTR)str);SendMessage不用考虑生命周期的问题,但有可能引起阻塞,用PostMessage不会引起阻塞,但要注意生命周期