进程外组件指针的传递

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

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


   
   
  
  

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

世纪殇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值