求助一个百思不得其解的灵异现象
我用的是BCB5 Excel2000版本,编译下面的代码,不知道为什么,我每次改动程序,如果直接执行下面的代码的话,就会报Access Violation之类的错而退出,然后我重新全部编译程序又正常了,每次都这样,快疯掉了,而且编译的程序md5码都是相同的,就是一个报错一个不报错,太诡异了哎....
下面是代码:
Variant vExcelApp, vSheet;
try{vExcelApp = Variant::CreateObject("Excel.Application");}
catch(...)
{MessageBox(0, "启动 Excel 出错, 可能是没有安装Excel.",
"DBGrid2Excel", MB_OK | MB_ICONERROR);
return;
}
vExcelApp.OlePropertySet("Visible", true);
vExcelApp.OlePropertyGet("Workbooks").OleFunction("Add", 1); // 工作表
vSheet = vExcelApp.OlePropertyGet("ActiveWorkbook").OlePropertyGet("Sheets", 1);
//设置单元格的宽度
for(int i=0; i<SG2->ColCount; i++)
{
int nColWidth =SG2->ColWidths[i];
vExcelApp.OlePropertyGet("Columns",i+1).OlePropertySet("ColumnWidth",nColWidth/5);
}
//数据写入Excel表格
for(int i=0; i<SG2->RowCount; i++)
{
for(int j=0; j<SG2->ColCount; j++)
{
vSheet.OlePropertyGet("Cells",i+1,j+1).OlePropertySet("Value",SG2->Cells[j][i]);
}
}
vSheet = Unassigned;
vExcelApp = Unassigned;
[解决办法]
应该调用某些函数的时候出现野指针,或者是数组越界了
最好是跟踪一下
看到底是那段代码会出现问题
然后再对症下药去解决
[解决办法]
不清楚。不过我的ole word和excel的程序有时候也这样,在ide环境里运行就会报这个错,脱离ide就不会了。有时候好像如果ole word和excel的时候已经有word和excel在运行了也不会报错。
[解决办法]
有时候好像如果ole word和excel的时候已经有word和excel在运行了也不会报错。
应该是有时候没有取到实例指针
[解决办法]
这个问题有难度....呵呵....来混口饭吃.
由于WORD和EXCEL没有开源,所以选成别人引用该程序可能造成的错误!(呵呵,无实质内容,MS东东就是这样的.)
[解决办法]
我觉得应该先判断一下是不是word的实例已经完全运行了。
[解决办法]
尽管可能没什么帮助,不过还是建议在主工程文件的main函数里加入OleInitialize(NULL)和OleUninitialize()试试
[解决办法]
Variant vExcelApp, vSheet;
try{vExcelApp = Variant::CreateObject("Excel.Application");}
catch(...)
{MessageBox(0, "启动 Excel 出错, 可能是没有安装Excel.",
"DBGrid2Excel", MB_OK | MB_ICONERROR);
return;
}
vExcelApp.OlePropertySet("Visible", true);
vExcelApp.OlePropertyGet("Workbooks").OleFunction("Add" /* , 1 */); // 工作表
vSheet = vExcelApp.OlePropertyGet("ActiveWorkbook").OlePropertyGet("Sheets", 1);
//设置单元格的宽度
for(int i=0; i <SG2->ColCount; i++)
{
int nColWidth =SG2->ColWidths[i];
vExcelApp.OlePropertyGet("Columns",i+1).OlePropertySet("ColumnWidth",nColWidth/5);
}
//数据写入Excel表格
for(int i=0; i <SG2->RowCount; i++)
{
for(int j=0; j <SG2->ColCount; j++)
{
vSheet.OlePropertyGet("Cells",i+1,j+1).OlePropertySet("Value",SG2->Cells[j][i]);
}
}
vSheet = Unassigned;
vExcelApp = Unassigned;
[解决办法]
OlePropertySet函数,如果是操作字符串数据,最好用char *,也就是说,不要直接用String,而是用.c_str(),例如:
OlePropertySet("Value",SG2->Cells[j][i]);
改为:
OlePropertySet("Value",SG2->Cells[j][i].c_str());