进程外组件 数据传递 指针传递

我们知道进程都有自己的进程空间,都有自己的起始地址,因此在一个进程中的指针在另外一个进程中是无效的,一般在一个进程中的使用的地址类型的指针在进程之间传递时是

不能使用的,经过笔者测试,如果我们传递接口指针则不会出现该问题,但要注意的是要自己实现该接口,比如IStream*现在举例如下:

[cpp]  view plain  copy
  1. //这是测试的代码  
  2. STDMETHODIMP Csimple::test (IStream* psim)  
  3. {  
  4.     char buf[100]={0};  
  5.     psim->Read(buf,100,NULL);  
  6.     MessageBoxA(NULL,buf,0,0);  
  7.     return S_OK;  
  8. }  

这是我们测试的代码

[cpp]  view plain  copy
  1. #include "stdafx.h"  
  2. #include<iostream>  
  3. #include<shlobj h="">  
  4. #include"interface.h"  
  5. #include"mytype.h"  
  6. using namespace std;  
  7. #import"D:\project\StreamImp\Debug\StreamImp.dll"no_namespace  
  8. extern "C" const GUID IID_Isimple=  
  9. {  
  10.     0xEFEFD281,0xBF44,0x416B,{0xBF,0x21,0x82,0xBA,0x42,0xF5,0x8A,0x4D}  
  11. };  
  12. extern "C" const GUID CLSID_simple=  
  13. {  
  14.     0xB9FB4559,0x22AB,0x4D9E,{0xA0,0xE1,0xE2,0x89,0x3C,0x54,0x40,0x25}  
  15.   
  16. };  
  17. int _tmain(int argc, _TCHAR* argv[])  
  18. {  
  19.     ::CoInitialize (NULL);  
  20.     IUnknown*pUnk=NULL;  
  21.     Isimple* psim=NULL;   
  22.     HRESULT hr=::CoCreateInstance(CLSID_simple,NULL,CLSCTX_LOCAL_SERVER,IID_Isimple,(void**)&pUnk);  
  23.     if(S_OK==hr)  
  24.     {  
  25.         cout<<"CoCreateInstance successfully\n";        
  26.     }  
  27.     else  
  28.         return 0;  
  29.     hr=pUnk->QueryInterface(IID_Isimple,(void**)&psim);  
  30.     if(S_OK==hr)  
  31.     {  
  32.         cout<<"QueryInterface successfully\n";  
  33.     }  
  34.     else  
  35.         return 0;         
  36.     ISimPtr sin;  
  37.     sin.CreateInstance(__uuidof(Sim));  
  38.     IStream*heh;  
  39.     sin.QueryInterface(IID_IStream,(void**)&heh);  
  40.     heh->Write("fsadas",100,NULL);  
  41.     hr=psim->test (heh);  
  42.     sin.Release();    
  43.     psim->Release();  
  44.     pUnk->Release();  
  45.     return 0;  
  46. }  
  47.   
  48. </shlobj></iostream>  

这是进程外组件参数的传递

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值