//在水晶报表文件夹1.0下,使用前需要注册
#import "Cdo32.dll" no_namespace
ICrystalDataObjectPtr m_pCDO;
HRESULT hr1;
hr1= m_pCDO.CreateInstance("CrystalDataObject.CrystalComObject");
m_pCDO->AddField("Order ID",VT_BSTR);
m_pCDO->AddField("Company Name",VT_BSTR);
short st= m_pCDO->GetColCount();
USES_CONVERSION;//
SAFEARRAYBOUND pSab[1];
pSab[0].lLbound = 0;
pSab[0].cElements =2;
SAFEARRAY *psa;
psa = SafeArrayCreate(VT_BSTR,1,pSab);
BSTR *pBstr;
SafeArrayAccessData(psa, (void**)&pBstr);
*(pBstr) = SysAllocString(T2OLE("test1"));
*(pBstr+1) = SysAllocString(T2OLE("test2"));
_variant_t var;
VariantInit(&var);
var.vt = VT_ARRAY;
var.parray = psa;
try
{
HRESULT h1= m_pCDO->AddRows(var);
}
catch (_com_error e)
{
CString strComError;
strComError.Format("错误编号: %08lx/n错误信息: %s/n错误源: %s/n错误描述: %s",
e.Error(), // 错误编号
e.ErrorMessage(), // 错误信息
(LPCSTR) e.Source(), // 错误源
(LPCSTR) e.Description()); // 错误描述
AfxMessageBox(strComError);
}
SafeArrayUnaccessData(psa);
SafeArrayDestroy(psa);
但是在运行AddRow()时始终出错 类型不匹配,找了很长时间,没找到原因。网上例子一般是VB或者Web的。但是它们是可以的啊,晕啊。以后再找