foster06 General User


Joined: 21 Sep 2005 Posts: 17 Location: Nice (France)
|
Posted: Tue Nov 08, 2005 9:57 am Post subject: Another problem using method execute on MailMerge |
|
|
Hi all,
Is anybody can help me.
I have already post a problem http://www.oooforum.org/forum/viewtopic.phtml?t=26617
but nobody answer for the moment.
So, I tried another method that is create a parameter where I put all the initialisation used by the method execute of MailMerge service.
When I test the code (in C) I have the folowing error :
| Quote: |
DISP_E_EXCEPTION = "The application needs to raise an exception. In this case, the structure passed in pexcepinfo should be filled in."
|
I dont understand where is the pb.
The code is folowing :
| Code: |
void GetDesktop(IDispatch *pOOo, VARIANT *result)
{
VARIANT param1;
VariantInit(¶m1);
param1.vt = VT_BSTR;
param1.bstrVal = SysAllocString( L"com.sun.star.frame.Desktop");
AutoWrap(DISPATCH_METHOD, result, pOOo, L"createInstance", 1, param1);
VariantClear( ¶m1 ) ;
}
void GetMailMerge( IDispatch *pOOo, VARIANT *result )
{
VARIANT param1;
VariantInit( ¶m1 ) ;
param1.vt = VT_BSTR ;
param1.bstrVal = SysAllocString( L"com.sun.star.text.MailMerge" ) ;
AutoWrap( DISPATCH_METHOD, result, pOOo, L"createInstance", 1, param1 ) ;
VariantClear( ¶m1 ) ;
}
void GetBridge_GetStruct( IDispatch *pOOo, VARIANT *result )
{
VARIANT param1;
VariantInit(¶m1);
param1.vt = VT_BSTR;
param1.bstrVal = SysAllocString( L"com.sun.star.beans.PropertyValue");
AutoWrap(DISPATCH_METHOD, result, pOOo, L"Bridge_GetStruct", 1, param1) ;
VariantClear( ¶m1 ) ;
}
long MERGE_OOo(void)
{
IDispatch *pobjServiceManager;
IDispatch *pStardesktop;
IDispatch *pStarReflection;
IDispatch *pStarMailMerge;
IDispatch *pStarBridge_GetStruct ;
IDispatch *pDoc;
IDispatch *pText;
VARIANT resultDesktop;
VARIANT resultReflection;
VARIANT resultMailMerge;
VARIANT resultBridge_GetStruct;
VARIANT resultDoc;
VARIANT parm[4];
VARIANT parmMailMerge;
VARIANT resultText;
VARIANT sStr;
OLECHAR szTemp[200] ;
char szMsg[MS] ;
int len ;
/* Initialize COM for this thread... */
CoInitialize(NULL);
hr = CLSIDFromProgID(L"com.sun.star.ServiceManager", &clsid);
if(FAILED(hr))
{
MessageBox(NULL, "CLSIDFromProgID() failed", "Error", 0x10010);
return -1;
}
/********************************************/
/* Start server and get IDispatch... */
hr = CoCreateInstance(&clsid, NULL, CLSCTX_LOCAL_SERVER, &IID_IDispatch, (void **)&pobjServiceManager);
if(FAILED(hr))
{
MessageBox(NULL, "OpenOffice not registered properly", "Error", 0x10010);
return -2;
}
/********************************************/
/* Get Desktop and its assoc. IDispatch... */
VariantInit(&resultDesktop);
GetDesktop(pobjServiceManager, &resultDesktop);
pStardesktop = resultDesktop.pdispVal;
/********************************************/
/* Get Reflection and its assoc. IDispatch... */
VariantInit(&resultBridge_GetStruct);
GetBridge_GetStruct( pobjServiceManager, &resultBridge_GetStruct ) ;
pStarBridge_GetStruct = resultBridge_GetStruct.pdispVal;
/********************************************/
/* Get MailMerge and its assoc. IDispatch... */
VariantInit(&resultMailMerge);
GetMailMerge(pobjServiceManager, &resultMailMerge);
pStarMailMerge = resultMailMerge.pdispVal;
sprintf( msg, "pStarMailMerge %p", pStarMailMerge ) ;
MessageBox(NULL, msg, "Message", MB_OK);
/********************************************/
{
/* GET PROPERTYVALUE... */
long idx = 0;
VARIANT queryResult;
VARIANT parms2;
/* WRAP UP PROPERTYVALUES... */
SAFEARRAY FAR *propVals;
propVals = SafeArrayCreateVector( VT_DISPATCH, 0, 7 ) ;
/* DocumentURL */
VariantInit( &parmMailMerge ) ;
parmMailMerge.vt = VT_BSTR ;
parmMailMerge.bstrVal = SysAllocString( L"DocumentURL" ) ;
hr = AutoWrap (DISPATCH_PROPERTYPUT, NULL, pStarBridge_GetStruct, L"Name", 1, parmMailMerge ) ;
VariantClear( &parmMailMerge ) ;
VariantInit( &parmMailMerge ) ;
parmMailMerge.vt = VT_BSTR ;
parmMailMerge.bstrVal = SysAllocString( L"file:///C:/courrier/OOo/Fich_col1.sxw" ) ;
hr = AutoWrap (DISPATCH_PROPERTYPUT, NULL, pStarBridge_GetStruct, L"Value", 1, parmMailMerge ) ;
VariantClear( &parmMailMerge ) ;
SafeArrayPutElement( propVals, &idx, pStarBridge_GetStruct ) ;
/* DataSourceName */
VariantInit( &parmMailMerge ) ;
parmMailMerge.vt = VT_BSTR ;
parmMailMerge.bstrVal = SysAllocString( L"DataSourceName" ) ;
hr = AutoWrap (DISPATCH_PROPERTYPUT, NULL, pStarBridge_GetStruct, L"Name", 1, parmMailMerge ) ;
VariantClear( &parmMailMerge ) ;
VariantInit( &parmMailMerge ) ;
parmMailMerge.vt = VT_BSTR ;
parmMailMerge.bstrVal = SysAllocString( L"fich_col1" ) ;
hr = AutoWrap (DISPATCH_PROPERTYPUT, NULL, pStarBridge_GetStruct, L"Value", 1, parmMailMerge ) ;
VariantClear( &parmMailMerge ) ;
idx = 1 ;
SafeArrayPutElement( propVals, &idx, pStarBridge_GetStruct ) ;
/* CommandeType */
VariantInit( &parmMailMerge ) ;
parmMailMerge.vt = VT_BSTR ;
parmMailMerge.bstrVal = SysAllocString( L"CommandType" ) ;
hr = AutoWrap (DISPATCH_PROPERTYPUT, NULL, pStarBridge_GetStruct, L"Name", 1, parmMailMerge ) ;
VariantClear( &parmMailMerge ) ;
VariantInit( &parmMailMerge ) ;
parmMailMerge.vt = VT_I4 ;
parmMailMerge.lVal = 0 ;
hr = AutoWrap (DISPATCH_PROPERTYPUT, NULL, pStarBridge_GetStruct, L"Value", 1, parmMailMerge ) ;
VariantClear( &parmMailMerge ) ;
idx = 2 ;
SafeArrayPutElement( propVals, &idx, pStarBridge_GetStruct ) ;
/* Command */
VariantInit( &parmMailMerge ) ;
parmMailMerge.vt = VT_BSTR ;
parmMailMerge.bstrVal = SysAllocString( L"Command" ) ;
hr = AutoWrap (DISPATCH_PROPERTYPUT, NULL, pStarBridge_GetStruct, L"Name", 1, parmMailMerge ) ;
VariantClear( &parmMailMerge ) ;
VariantInit( &parmMailMerge ) ;
parmMailMerge.vt = VT_BSTR ;
parmMailMerge.bstrVal = SysAllocString( L"Fich_col1" ) ;
hr = AutoWrap (DISPATCH_PROPERTYPUT, NULL, pStarBridge_GetStruct, L"Value", 1, parmMailMerge ) ;
VariantClear( &parmMailMerge ) ;
idx = 3 ;
SafeArrayPutElement( propVals, &idx, pStarBridge_GetStruct ) ;
/* OutputType */
VariantInit( &parmMailMerge ) ;
parmMailMerge.vt = VT_BSTR ;
parmMailMerge.bstrVal = SysAllocString( L"OutputType" ) ;
hr = AutoWrap (DISPATCH_PROPERTYPUT, NULL, pStarBridge_GetStruct, L"Name", 1, parmMailMerge ) ;
VariantClear( &parmMailMerge ) ;
VariantInit( &parmMailMerge ) ;
parmMailMerge.vt = VT_I2 ;
parmMailMerge.iVal = 2 ;
hr = AutoWrap (DISPATCH_PROPERTYPUT, NULL, pStarBridge_GetStruct, L"Value", 1, parmMailMerge ) ;
VariantClear( &parmMailMerge ) ;
idx = 4 ;
SafeArrayPutElement( propVals, &idx, pStarBridge_GetStruct ) ;
/* OutputURL */
VariantInit( &parmMailMerge ) ;
parmMailMerge.vt = VT_BSTR ;
parmMailMerge.bstrVal = SysAllocString( L"OutputURL" ) ;
hr = AutoWrap (DISPATCH_PROPERTYPUT, NULL, pStarBridge_GetStruct, L"Name", 1, parmMailMerge ) ;
VariantClear( &parmMailMerge ) ;
VariantInit( &parmMailMerge ) ;
parmMailMerge.vt = VT_BSTR ;
parmMailMerge.bstrVal = SysAllocString( L"file:///C:/courrier/OOo/" ) ;
hr = AutoWrap (DISPATCH_PROPERTYPUT, NULL, pStarBridge_GetStruct, L"Value", 1, parmMailMerge ) ;
VariantClear( &parmMailMerge ) ;
idx = 5 ;
SafeArrayPutElement( propVals, &idx, pStarBridge_GetStruct ) ;
/* FileNamePrefix */
VariantInit( &parmMailMerge ) ;
parmMailMerge.vt = VT_BSTR ;
parmMailMerge.bstrVal = SysAllocString( L"FileNamePrefix" ) ;
hr = AutoWrap (DISPATCH_PROPERTYPUT, NULL, pStarBridge_GetStruct, L"Name", 1, parmMailMerge ) ;
VariantClear( &parmMailMerge ) ;
VariantInit( &parmMailMerge ) ;
parmMailMerge.vt = VT_BSTR ;
parmMailMerge.bstrVal = SysAllocString( L"auto" ) ;
hr = AutoWrap (DISPATCH_PROPERTYPUT, NULL, pStarBridge_GetStruct, L"Value", 1, parmMailMerge ) ;
VariantClear( &parmMailMerge ) ;
idx = 6 ;
SafeArrayPutElement( propVals, &idx, pStarBridge_GetStruct ) ;
/* SET ALL PARAMETERS TO SAVE DOCUMENT... */
VariantInit (&parms2);
parms2.vt = VT_ARRAY | VT_DISPATCH;
parms2.parray = propVals;
VariantInit( &queryResult ) ;
AutoWrap( DISPATCH_METHOD, &queryResult, pStarMailMerge, L"execute", 1, parms2 ) ;
}
return 0;
}
|
I am very disappointed about this.
I need your help, please. |
|