com对象的指针传递 c# com对象 指针 传递 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 如果这样的话,倒可以解释指针无效的现象。这个问题是复杂点:object传不了;指针无法跨进程;那“进程注入”是什么技术?可以用在这里不? 所谓“进程注入”就是利用CreateRemoteThread API函数在目标进程中添加程序,这样一来,你的程序在那个进程内执行,就可以访问同进程的指针了。因为直接添加代码相当于手工用机器语言写程序,很麻烦,所以一种变通的做法是写一个dll,然后仅仅写一小段代码插入目标进程,然后装载这个dll,加载实际有意义的代码。但是这C#做不到。而且这种技巧和病毒无异,除非你加入各个杀毒软件的白名单,否则会被杀毒软件当作病毒而阻止。 这是某高手的一段话:说的是指针的传递,好像有意义,我还不知道利用。---------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原子来传递。------------------- 帮我解释下这两句代码吧 不是不懂 就是不是非常清晰 当日结贴 如何实现多位随机码生成器 获取屏幕大小 C#怎样用钩子记录键盘的操作 通过数组的值得到相应的索引值 Visual Studio 无法执行C程序代码 同步异步 看这个代码,可以用另外方法实现修改数据吗? 为什么找不到存储过程(急!!C#)?? 操作日志问题 已知有N行,每行有三列,如何做到输出,长度为N,所有数字参与的数组? 两个窗体中datagridview互相传值,从A窗口将选中行传递到B窗口
如果这样的话,倒可以解释指针无效的现象。这个问题是复杂点:object传不了;指针无法跨进程;那“进程注入”是什么技术?可以用在这里不?
---------
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原子来传递。-------------------