首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

一个百思不得其解的灵异现象

2012-03-14 
求助一个百思不得其解的灵异现象我用的是BCB5Excel2000版本,编译下面的代码,不知道为什么,我每次改动程序,

求助一个百思不得其解的灵异现象
我用的是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());

热点排行