1. 程式人生 > >程序外元件指標的傳遞

程序外元件指標的傳遞

我們知道程序都有自己的程序空間,都有自己的起始地址,因此在一個程序中的指標在另外一個程序中是無效的,一般在一個程序中的使用的地址型別的指標在程序之間傳遞時是

不能使用的,經過筆者測試,如果我們傳遞介面指標則不會出現該問題,但要注意的是要自己實現該介面,比如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;
}

這是程序外元件引數的傳遞