本帖最后由 hottaro 于 2009-10-14 08:38:26 编辑

解决方案 »

  1.   

    如果是其它进程的字符串要在自己的进程中的某个控件中显示的话,不能用SetWindowText,要发送WM_SETTEXT消息
      

  2.   

    找到原因了,汗,有同样问题的朋友我在这贴一段出来第一点:什么是共享数据段?为什么要用共享数据段??它有什么用途?? 
    在Win16环境中,DLL的全局数据对每个载入它的进程来说都是相同的;而在Win32环境中,情况却发生了变化,DLL函数中的代码所创建的任何对象(包括变量)都归调用它的线程或进程所有。当进程在载入DLL时,操作系统自动把DLL地址映射到该进程的私有空间,也就是进程的虚拟地址空间,而且也复制该DLL的全局数据的一份拷贝到该进程空间。也就是说每个进程所拥有的相同的DLL的全局数据,它们的名称相同,但其值却并不一定是相同的,而且是互不干涉的。 因此,在Win32环境下要想在多个进程中共享数据,就必须进行必要的设置。在访问同一个Dll的各进程之间共享存储器是通过存储器映射文件技术实现的。也可以把这些需要共享的数据分离出来,放置在一个独立的数据段里,并把该段的属性设置为共享。必须给这些变量赋初值,否则编译器会把没有赋初始值的变量放在一个叫未被初始化的数据段中。 
      

  3.   


    如果此进程的字符串要到其它进程的控件显示的话,也可以用发消息么?但好像不管哪种方法str还是跨进程了啊,~~~
      

  4.   

    你也可以发送WM_COPYDATA消息,具体用法你可以参考MSDN
      

  5.   

    VM_SETTEXT不行,COPYDATA再试试。
      

  6.   

    想跨进程设置窗口属性?
    惯用手段:
    VirtualAllocEx在目标进程申请内存
    WriteProcessMemory将本进程数据拷贝到目标进程
    SendMessage通知窗口具体百度一下
      

  7.   

    问题解决了,有十一种共享内存方式,而我正好有DLL。就顺便用了DLL共享的方式了。而之前一直搞不定因为在数据段里没初始化,汗,这么低级的错误,二天没发现。谢谢大家,结贴。