Click here to Skip to main content
15,903,385 members
Home / Discussions / C / C++ / MFC
   

C / C++ / MFC

 
GeneralHELP: Printing in a region Pin
Vitaly Tomilov21-Mar-05 6:30
Vitaly Tomilov21-Mar-05 6:30 
GeneralEvent enumeration:compiles,links no output Pin
brilliant10121-Mar-05 5:58
brilliant10121-Mar-05 5:58 
GeneralRe: Event enumeration:compiles,links no output Pin
brilliant10121-Mar-05 6:00
brilliant10121-Mar-05 6:00 
GeneralRe: Event enumeration:compiles,links no output Pin
David Crow21-Mar-05 7:27
David Crow21-Mar-05 7:27 
GeneralHardware enumeration Pin
brilliant10121-Mar-05 5:57
brilliant10121-Mar-05 5:57 
GeneralRe: Hardware enumeration Pin
brilliant10121-Mar-05 5:59
brilliant10121-Mar-05 5:59 
GeneralRe: Hardware enumeration Pin
David Crow21-Mar-05 7:24
David Crow21-Mar-05 7:24 
GeneralCOM Pin
act_x21-Mar-05 4:26
act_x21-Mar-05 4:26 
I am trying to implement an ATL based .EXE server , with Connection Point Support

I am trying to Call a handler in the client with two variables
BSTR fileName
VARIANT result (intended to be a UINT)

The first variable is successfully passed to the client
while the VARIANT is not getting passed properly . it points to VT_NULL in my client

Code from my CoClass
STDMETHODIMP CMySrvr::OpenModel(BSTR FileName)<br />
{<br />
	// TODO: Add your implementation code here<br />
<br />
        _bstr_t str(FileName);<br />
	bool res = mgr.OpenModel((string)str);<br />
<br />
	VARIANT result ;<br />
	result.vt= VT_UINT ;<br />
	if(res)<br />
		result.uintVal=0x01;<br />
	else<br />
		result.uintVal=0x00;<br />
<br />
	Fire_XmlOpenResponse(FileName,result);	<br />
<br />
	return S_OK;<br />
}

Here is the IDE generated code for Fire_XmlOpenResponse

HRESULT Fire_XmlOpenResponse(BSTR fileName, VARIANT result)<br />
	{<br />
		CComVariant varResult;<br />
		T* pT = static_cast<T*>(this);<br />
		int nConnectionIndex;<br />
		CComVariant* pvars = new CComVariant[2];<br />
		int nConnections = m_vec.GetSize();<br />
		<br />
		for (nConnectionIndex = 0; nConnectionIndex < nConnections; nConnectionIndex++)<br />
		{<br />
			pT->Lock();<br />
			CComPtr<IUnknown> sp = m_vec.GetAt(nConnectionIndex);<br />
			pT->Unlock();<br />
			IDispatch* pDispatch = reinterpret_cast<IDispatch*>(sp.p);<br />
			if (pDispatch != NULL)<br />
			{<br />
				VariantClear(&varResult);<br />
				pvars[1] = fileName;<br />
				pvars[0] = &result;<br />
				DISPPARAMS disp = { pvars, NULL, 2, 0 };<br />
				pDispatch->Invoke(0x2, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, &disp, &varResult, NULL, NULL);<br />
			}<br />
		}<br />
		delete[] pvars;<br />
		return varResult.scode;<br />
	<br />
	}
IDL definition of the above
dispinterface _IEACEepromSrvrEvents<br />
	{<br />
		properties:<br />
		methods:<br />
		[id(1), helpstring("method Event1")] HRESULT Event1();<br />
		[id(2), helpstring("method XmlOpenResponse")] HRESULT XmlOpenResponse([in] BSTR fileName , [in] VARIANT result);<br />
	};



Here is my client code

client .h file
static	_ATL_FUNC_INFO dataInfo = {CC_STDCALL, VT_EMPTY, 0, 0};<br />
static _ATL_FUNC_INFO  xmlOpenInfo = { CC_STDCALL, VT_EMPTY,2,{VT_BSTR , VT_UINT}};<br />
<br />
class CEacEepromClient : public IDispEventImpl<0,CEacEepromClient ,&DIID__IEACEepromSrvrEvents,&LIBID_EEPROMSERVERLib,1,0><br />
{<br />
public:<br />
	void Use1();<br />
	CEacEepromClient();<br />
	virtual ~CEacEepromClient();<br />
<br />
BEGIN_SINK_MAP(CEacEepromClient)<br />
 SINK_ENTRY_INFO(0,DIID__IEACEepromSrvrEvents,1,HandlerEvent1,&dataInfo)<br />
 SINK_ENTRY_INFO(0,DIID__IEACEepromSrvrEvents,2,HandleXmlFileOpen,&xmlOpenInfo)<br />
END_SINK_MAP()<br />
//	<br />
HRESULT __stdcall HandlerEvent1();<br />
HRESULT __stdcall HandleXmlFileOpen(BSTR fileName , VARIANT result);<br />
protected :<br />
<br />
	IEACEepromSrvrPtr m_srvr;<br />
	IUnknownPtr iPtr ;<br />
<br />
<br />
};

Handler code in the client.cpp file
STDMETHODIMP CEACEepromSrvr::OpenXmlModel(BSTR xmlFileName)<br />
{<br />
	// TODO: Add your implementation code here<br />
<br />
    _bstr_t str(xmlFileName);<br />
	bool res = mgr.OpenModel((string)str);<br />
<br />
<br />
	VARIANT result ;<br />
	result.vt= VT_UINT ;<br />
	if(res)<br />
		result.uintVal=0x01;<br />
	else<br />
		result.uintVal=0x00;<br />
<br />
	Fire_XmlOpenResponse(xmlFileName,result);<br />
	<br />
<br />
	return S_OK;<br />
}

Please help
GeneralRe: COM Pin
Vitaly Tomilov21-Mar-05 6:44
Vitaly Tomilov21-Mar-05 6:44 
GeneralPlease Help Pin
Rassul Yunussov21-Mar-05 3:41
Rassul Yunussov21-Mar-05 3:41 
GeneralToolTip Close button Pin
Gurra_Koo21-Mar-05 3:20
Gurra_Koo21-Mar-05 3:20 
GeneralSerial comms Pin
Karl Lloyd21-Mar-05 3:05
Karl Lloyd21-Mar-05 3:05 
GeneralBorder size Pin
caykahve21-Mar-05 2:35
caykahve21-Mar-05 2:35 
GeneralRe: Border size Pin
Ravi Bhavnani21-Mar-05 3:46
professionalRavi Bhavnani21-Mar-05 3:46 
GeneralRe: Border size Pin
caykahve22-Mar-05 7:34
caykahve22-Mar-05 7:34 
GeneralRe: Border size Pin
Vitaly Tomilov21-Mar-05 6:47
Vitaly Tomilov21-Mar-05 6:47 
Generalload ttf file and use it Pin
JabraJabra21-Mar-05 2:16
JabraJabra21-Mar-05 2:16 
GeneralRe: load ttf file and use it Pin
Chris Losinger21-Mar-05 8:59
professionalChris Losinger21-Mar-05 8:59 
GeneralAllocating Memory in a Static Library Pin
Joel Holdsworth21-Mar-05 1:53
Joel Holdsworth21-Mar-05 1:53 
GeneralRe: Allocating Memory in a Static Library Pin
HalfWayMan21-Mar-05 3:05
HalfWayMan21-Mar-05 3:05 
GeneralRe: Allocating Memory in a Static Library Pin
Joel Holdsworth21-Mar-05 3:47
Joel Holdsworth21-Mar-05 3:47 
GeneralSmalltalk Pin
Anand for every one21-Mar-05 1:43
Anand for every one21-Mar-05 1:43 
GeneralRe: Smalltalk Pin
David Crow21-Mar-05 3:52
David Crow21-Mar-05 3:52 
GeneralDatabase question Pin
Alexander M.,21-Mar-05 1:40
Alexander M.,21-Mar-05 1:40 
Generaldrag and drop Pin
jetournier21-Mar-05 1:25
jetournier21-Mar-05 1:25 

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.