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

来源:互联网 发布:文献索引数据库 编辑:程序博客网 时间:2024/06/05 08:02

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

不能使用的,经过笔者测试,如果我们传递接口指针则不会出现该问题,但要注意的是要自己实现该接口,比如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
原创粉丝点击