我们知道进程都有自己的进程空间,都有自己的起始地址,因此在一个进程中的指针在另外一个进程中是无效的,一般在一个进程中的使用的地址类型的指针在进程之间传递时是
不能使用的,经过笔者测试,如果我们传递接口指针则不会出现该问题,但要注意的是要自己实现该接口,比如IStream*现在举例如下:
- //这是测试的代码
- STDMETHODIMP Csimple::test (IStream* psim)
- {
- char buf[100]={0};
- psim->Read(buf,100,NULL);
- MessageBoxA(NULL,buf,0,0);
- return S_OK;
- }
这是我们测试的代码
- #include "stdafx.h"
- #include<iostream>
- #include<shlobj h="">
- #include"interface.h"
- #include"mytype.h"
- using namespace std;
- #import"D:\project\StreamImp\Debug\StreamImp.dll"no_namespace
- extern "C" const GUID IID_Isimple=
- {
- 0xEFEFD281,0xBF44,0x416B,{0xBF,0x21,0x82,0xBA,0x42,0xF5,0x8A,0x4D}
- };
- extern "C" const GUID CLSID_simple=
- {
- 0xB9FB4559,0x22AB,0x4D9E,{0xA0,0xE1,0xE2,0x89,0x3C,0x54,0x40,0x25}
- };
- int _tmain(int argc, _TCHAR* argv[])
- {
- ::CoInitialize (NULL);
- IUnknown*pUnk=NULL;
- Isimple* psim=NULL;
- HRESULT hr=::CoCreateInstance(CLSID_simple,NULL,CLSCTX_LOCAL_SERVER,IID_Isimple,(void**)&pUnk);
- if(S_OK==hr)
- {
- cout<<"CoCreateInstance successfully\n";
- }
- else
- return 0;
- hr=pUnk->QueryInterface(IID_Isimple,(void**)&psim);
- if(S_OK==hr)
- {
- cout<<"QueryInterface successfully\n";
- }
- else
- return 0;
- ISimPtr sin;
- sin.CreateInstance(__uuidof(Sim));
- IStream*heh;
- sin.QueryInterface(IID_IStream,(void**)&heh);
- heh->Write("fsadas",100,NULL);
- hr=psim->test (heh);
- sin.Release();
- psim->Release();
- pUnk->Release();
- return 0;
- }
- </shlobj></iostream>
这是进程外组件参数的传递