I created a class for cell and sheet (both has their own IDispatch). I called AutoWrap("Range") and it worked fine.
wchar_t wcParam[16];
char ulColName[16] = "";
char lrColName[16] = "";
GetColName(ulColName, col + 1);
GetColName(lrColName, col + colspan);
swprintf(wcParam, L"%hs%d:%hs%d", ulColName, row + 1, lrColName, row + rowspan);
VARIANT pars;
VariantInit(&pars);
pars.vt = VT_BSTR;
pars.bstrVal = ::SysAllocString(wcParam);
VARIANT result;
VariantInit(&result);
AutoWrap(DISPATCH_PROPERTYGET, &result, sheet.dispatch, L"Range", 1, pars);
cell = result.pdispVal;
Sheet has getRange() function which is the same as above:
IDispatch* CXlsSheet::getRange(int ulCol, int ulRow, int lrCol, int lrRow)
{
DBGPrintf("CXlsSheet ");
wchar_t wcParam[16];
char ulColName[16] = "";
char lrColName[16] = "";
GetColName(ulColName, ulCol);
GetColName(lrColName, lrCol);
swprintf(wcParam, L"%hs%d:%hs%d", ulColName, ulRow, lrColName, lrRow);
VARIANT pars;
VariantInit(&pars);
pars.vt = VT_BSTR;
pars.bstrVal = ::SysAllocString(wcParam);
VARIANT result;
VariantInit(&result);
AutoWrap(DISPATCH_PROPERTYGET, &result, dispatch, L"Range", 1, pars);
return result.pdispVal;
};
When I call getRange() instead of the first code, it crashes.
cell = sheet.getRange(col + 1, row + 1, col + colspan, row + rowspan)
Any idea why?
Aucun commentaire:
Enregistrer un commentaire