解决方案 »

  1.   


    如果这样的话,倒可以解释指针无效的现象。这个问题是复杂点:object传不了;指针无法跨进程;那“进程注入”是什么技术?可以用在这里不?
      

  2.   

    所谓“进程注入”就是利用CreateRemoteThread API函数在目标进程中添加程序,这样一来,你的程序在那个进程内执行,就可以访问同进程的指针了。因为直接添加代码相当于手工用机器语言写程序,很麻烦,所以一种变通的做法是写一个dll,然后仅仅写一小段代码插入目标进程,然后装载这个dll,加载实际有意义的代码。但是这C#做不到。而且这种技巧和病毒无异,除非你加入各个杀毒软件的白名单,否则会被杀毒软件当作病毒而阻止。
      

  3.   

    这是某高手的一段话:说的是指针的传递,好像有意义,我还不知道利用。
    ---------
    WM_COPYDATA
         当我们在两个进程之间传递数据的时候,指针并不好使,因为指针的地址空间是相对于进程的地址空间,如果除了进程,指针就不再具有任何意义。但是,当我们通过WM_COPYDATA传递数据的时候,发现它也是指向指针,它又是怎样做到的呢?
        首先我们看看用WM_COPYDATA传递字符串数据时发送方应该怎么做:
        CString  str="hello yuanyuan!";
        COPYDATASTRUCT  cpy;
        cpy.dwData=0;   //传递的数据,此处不使用
        cpy.cbData=str.GetLength()+1;//传递的数据区的长度,字符串还有一个截止符,记得加上
        cpy.lpData=str.GetBuffer(cpy.cbData);//指向数据缓冲区
       ::SendMessage(pWnd,WM_COPYDATA,(LPARAM)&cpy);//发送消息,其中pWnd为窗口句柄  接收接收消息:首先在消息映色中添加上ON_WM_COPYDATA(),在头文件中添加上函数:afx_msg void OnCopyData(CWnd* pWnd,COPYDATASTRUCT* pCopyDataStruct)
      在OnCopyData函数中:只需要CString str=(LPCSTR)pCopyDataStruct->lpData;就能得到你想要的字符串了  我们发现发送方传递的也是字符串的指针,为什么我们自己定义的消息就不能这样只传递字符串而WM_COPYDATA就可以呢?  因为SendMessage对WM_COPYDATA消息进行了特殊照顾,在发送此消息时,它会开辟一个内存空间把发送方数据拷贝进去,之后再把消息发送给接收程序;在接收程序中使用COPYDATASTRUCT结构的lpData指针,它会把开辟的内存地址空间映射到接收进程的内存空间,这样一来就能获得数据了。也就是说,虽然你添加的是指针,但是传递的不是指针了。如果你想用自己的消息传递字符串的话,你可以采用ATOM原子来传递。-------------------