Passing double datatype from C++ to VB6
I'm trying tp fire-up an event from a OCX (written & compiled C++
visual VS2003) with a VB6 client.
That event should pass 2 parameter : the firts is a BSTR and the second
is double.
With these parameter types the VB6 client doesn't receive the event!
If I change the second parameter type into a BSTR, the VB6 client
receives event correctly!!!!
Any idea?
I put the C++ code at the end of the message...
Thanks in advice!
------------------- event code ----------------------
HRESULT Fire_DragEnd(BSTR* PartName, DOUBLE Position)
{
CComVariant varResult;
T* pT = static_cast<T*>(this);
int nConnectionIndex;
CComVariant* pvars = new CComVariant[2];
int nConnections = m_vec.GetSize();
for (nConnectionIndex = 0; nConnectionIndex < nConnections;
nConnectionIndex++)
{
pT->Lock();
CComPtr<IUnknown> sp = m_vec.GetAt(nConnectionIndex);
pT->Unlock();
IDispatch* pDispatch = reinterpret_cast<IDispatch*>(sp.p);
if (pDispatch != NULL)
{
VariantClear(&varResult);
pvars[0] = *PartName;
pvars[1] = Position;
DISPPARAMS disp = { pvars, NULL, 2, 0 };
pDispatch->Invoke(0x4, IID_NULL, LOCALE_USER_DEFAULT,
DISPATCH_METHOD, &disp, &varResult, NULL, NULL);
}
}
delete[] pvars;
return varResult.scode;
}
--------------------------- idl ---------------------------
dispinterface _IVRSAnimationEvents
{
properties:
methods: ... omissis ...
[id(4), helpstring("method DragEnd")] HRESULT DragEnd([out]BSTR*
PartName, [out]DOUBLE* Position);
};
----------------------- event's fire -----------------------
void CVRSAnimationCA5XX::DragEnd()
{
BSTR sPN = _bstr_t(sPart2Drag.c_str()).copy();
DOUBLE dPos = 1500.56;
Fire_DragEnd(&sPN, dPos);
}