Click here to Skip to main content
15,905,913 members
Home / Discussions / COM
   

COM

 
AnswerRe: out of process activex exe Pin
Roger Stoltz28-Feb-06 21:23
Roger Stoltz28-Feb-06 21:23 
GeneralRe: out of process activex exe Pin
david_reynolds1-Mar-06 3:11
david_reynolds1-Mar-06 3:11 
QuestionHow to delete a COM object - My Other Code Pin
AmitGG27-Feb-06 22:45
AmitGG27-Feb-06 22:45 
AnswerRe: How to delete a COM object - My Other Code Pin
AmitGG28-Feb-06 22:14
AmitGG28-Feb-06 22:14 
QuestionHow to delete a COM object Pin
AmitGG27-Feb-06 20:30
AmitGG27-Feb-06 20:30 
AnswerRe: How to delete a COM object Pin
mbue27-Feb-06 22:07
mbue27-Feb-06 22:07 
GeneralRe: How to delete a COM object Pin
AmitGG27-Feb-06 22:21
AmitGG27-Feb-06 22:21 
GeneralRe: How to delete a COM object Pin
mbue27-Feb-06 23:29
mbue27-Feb-06 23:29 
here comes a very small demonstration how COM works:

// client app<br />
<br />
void CFDlinkDoc::func1()<br />
{<br />
	HRESULT hr = CoInitialize(0);<br />
	hr = CoCreateInstance(__uuidof(FM2_AnalysisControl) ,0, CLSCTX_INPROC_SERVER, __uuidof(IFM2_AnalysisControl), &m_pAnalCntrlv7);<br />
	if(S_OK==hr)<br />
	{<br />
		m_pAnalCntrlv7->Release(); // m_pAnalCntrlv7->_ref == 0<br />
	}<br />
	CoUninitialize();<br />
}<br />
<br />
// system call (very abstract)<br />
HRESULT CoCreateInstance(REFCLSID rclsid,LPUNKNOWN pout,DWORD dwClsContext,REFIID riid,LPVOID* ppv)<br />
{<br />
	char	dll[MAX_PATH];<br />
	// find the module in the registry identified by __uuidof(FM2_AnalysisControl)<br />
	HINSTANCE						hi = LoadLibrary(dll);<br />
	LPFNGETCLASSOBJECT	fn=(LPFNGETCLASSOBJECT)(hi?GetProcAddress(h,"DllGetClassObject"):0);<br />
	if(fn)<br />
	{<br />
		IClassFactory*	fac;<br />
		HRESULT					hr;<br />
		if(S_OK==fn(IID_NULL,riid,(void**)ppv)) return S_OK;<br />
		if(S_OK!=fn(IID_NULL,IID_IClassFactory,(void**)&fac)) return E_NOINTERFACE;<br />
		hr = fac->CreateInstance(pout,riid,(void**)ppv); fac->Release();<br />
		return hr;<br />
	}<br />
	return E_FAIL;<br />
}<br />
<br />
// server dll<br />
class iAnalysisControl : public IAnalysisControl<br />
{<br />
public: // IUnknown<br />
	virtual HRESULT __stdcall QueryInterface(REFIID riid,void** ppv)<br />
	{<br />
		if(riid==__uuidof(IFM2_AnalysisControl)) return *(IAnalysisControl**)ppv=this,AddRef(),S_OK;<br />
		if(riid==IID_IUnknown) return *(IUnknown**)ppv=this,AddRef(),S_OK;<br />
		return E_NOINTERFACE;<br />
	}<br />
	virtual unsigned long __stdcall AddRef(){ return ++_ref; }<br />
	virtual unsigned long __stdcall Release(){ if(!--_ref){ delete this; return 0; } return _ref; }<br />
	<br />
	// iAnalysisControl<br />
	iAnalysisControl(){ _ref=1; }<br />
	~iAnalysisControl(){ ASSERT(!_ref); }<br />
	long	_ref;<br />
};<br />
<br />
HRESULT FAR PASCAL DllGetClassObject(REFCLSID rclsid,REFIID riid,LPVOID* ppv)<br />
{<br />
	if(riid==__uuidof(IFM2_AnalysisControl))<br />
	{<br />
		iAnalysisControl* me = new iAnalysisControl;<br />
		return me?*(IAnalysisControl**)ppv=me,S_OK:E_OUTOFMEMORY;<br />
	}<br />
	return E_NOINTERFACE;<br />
}


Debug through the code and you can see whats wrong in your modules. In this example the external interface refcount goes to zero when you call Release(). Sorry for the vanished tabs.
GeneralRe: How to delete a COM object Pin
AmitGG28-Feb-06 0:05
AmitGG28-Feb-06 0:05 
GeneralRe: How to delete a COM object Pin
mbue28-Feb-06 3:51
mbue28-Feb-06 3:51 
QuestionConnecting Multiple clients to single server using DCOM Pin
abhiramsss27-Feb-06 18:21
abhiramsss27-Feb-06 18:21 
AnswerRe: Connecting Multiple clients to single server using DCOM Pin
FearlessBurner6-Mar-06 1:51
FearlessBurner6-Mar-06 1:51 
GeneralRe: Connecting Multiple clients to single server using DCOM Pin
abhiramsss8-Mar-06 19:10
abhiramsss8-Mar-06 19:10 
GeneralRe: Connecting Multiple clients to single server using DCOM Pin
abhiramsss9-Mar-06 23:31
abhiramsss9-Mar-06 23:31 
GeneralRe: Connecting Multiple clients to single server using DCOM Pin
FearlessBurner10-Mar-06 0:18
FearlessBurner10-Mar-06 0:18 
GeneralRe: Connecting Multiple clients to single server using DCOM Pin
abhiramsss12-Mar-06 20:09
abhiramsss12-Mar-06 20:09 
GeneralRe: Connecting Multiple clients to single server using DCOM Pin
abhiramsss13-Mar-06 22:30
abhiramsss13-Mar-06 22:30 
GeneralRe: Connecting Multiple clients to single server using DCOM Pin
FearlessBurner16-Mar-06 4:25
FearlessBurner16-Mar-06 4:25 
GeneralRe: Connecting Multiple clients to single server using DCOM Pin
abhiramsss19-Mar-06 21:24
abhiramsss19-Mar-06 21:24 
GeneralRe: Connecting Multiple clients to single server using DCOM Pin
FearlessBurner22-Mar-06 6:51
FearlessBurner22-Mar-06 6:51 
QuestionAutomation Server Can't Create Object Pin
bigmacrox27-Feb-06 12:46
bigmacrox27-Feb-06 12:46 
AnswerRe: Automation Server Can't Create Object Pin
mbue27-Feb-06 16:18
mbue27-Feb-06 16:18 
QuestionODBC dropping cell values Pin
RB@Emphasys27-Feb-06 5:30
RB@Emphasys27-Feb-06 5:30 
QuestionDrag-and-Drop in explorer.exe. Pin
Jerry New26-Feb-06 17:20
Jerry New26-Feb-06 17:20 
AnswerRe: Drag-and-Drop in explorer.exe. Pin
mbue27-Feb-06 16:21
mbue27-Feb-06 16:21 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.