IDispatch:Invoke - Runtime Access Violation error when accessing DISPARARAM &dp
-
before invoking the IDispacth::invoke I do the following: BOOL CLASSNAME ::InvokeGetValue( IDispatch *InDispatch, DISPID& InDispId, LCID& InLcid, long InUserComId, CString& OutValue, BOOL bAdhocCom, int NumToReserve, CString& Name1, CString& Name2) { CString strReturn; VARIANTARG va; EXCEPINFO exInfo; UINT uErr; DISPPARAMS dp; HRESULT hr; BSTR argConversion; BSTR sName1= Name1.AllocSysString(); BSTR sName2= Name2.AllocSysString(); Num=32; int nArgs = 3; dp.cArgs = nArgs; dp.cNamedArgs = 0; //////???AT RUN TIME IT CRASHES ON THE NEXT INSTRUCTION ///// COMPLAINIG ABOUT UNHANDLED EXCEPTION- ACCESS VIOLATION dp.rgvarg[0].vt = VT_I2; dp.rgvarg[0].iVal = NumToReserve; ANY HELP IS HIGHLY APPRECIATED. Paradise is where I am. Voltaire
-
before invoking the IDispacth::invoke I do the following: BOOL CLASSNAME ::InvokeGetValue( IDispatch *InDispatch, DISPID& InDispId, LCID& InLcid, long InUserComId, CString& OutValue, BOOL bAdhocCom, int NumToReserve, CString& Name1, CString& Name2) { CString strReturn; VARIANTARG va; EXCEPINFO exInfo; UINT uErr; DISPPARAMS dp; HRESULT hr; BSTR argConversion; BSTR sName1= Name1.AllocSysString(); BSTR sName2= Name2.AllocSysString(); Num=32; int nArgs = 3; dp.cArgs = nArgs; dp.cNamedArgs = 0; //////???AT RUN TIME IT CRASHES ON THE NEXT INSTRUCTION ///// COMPLAINIG ABOUT UNHANDLED EXCEPTION- ACCESS VIOLATION dp.rgvarg[0].vt = VT_I2; dp.rgvarg[0].iVal = NumToReserve; ANY HELP IS HIGHLY APPRECIATED. Paradise is where I am. Voltaire
-
did you initialize : VariantInit(va);//your variant and dp.rgvarg = va;//your dispparam with you variant? access violation is often null pointer...!
The problem was solved by a codeguru member: CComVariant dpv[3]; dp.rgvarg = dpv; I was not allocating space for the dp array structure. Thank you very much for you reply. I believe your dp.rgvarg = va;//your dispparam with you variant? statement was in the same general direction too. Thanks again. Paradise is where I am. Voltaire