hur.cn - 华软网

 热门搜索

谁来拯救我啊。。快崩溃了

  作者:未知    来源:网络    更新时间:2011/8/28
大家帮我看看下面的代码有什么问题吧
。。。
CExportToSDXDlg dlg;
if (dlg.DoModal() != IDOK)
{
return;
}
。。。
//对话框初始化,问题也出现在这里
BOOL CExportToSDXDlg::OnInitDialog()
{
CDialog::OnInitDialog();

CsoDatasets objDts = NULL; //数据集集合
CsoDataset objDt = NULL; //单个数据集
long lDtCnt = (long)0; //数据集个数

objDts = g_DataSource.GetDatasets();
lDtCnt = objDts.GetCount();

if (lDtCnt == 0)
{
return FALSE;
}

for(long i=1; i<=lDtCnt; i++)
{
objDt = objDts.GetItem(COleVariant(i)); ——运行到这里就出错了
m_ListDt.AddString((LPCTSTR)objDt.GetName());
}

objDt.Close();
m_ListDt.SetCurSel(0);
return TRUE;
}

出错的地方调用了下面这个函数,这个函数不是我写的:
CsoDataset CsoDatasets::GetItem(const VARIANT& Index)
{
LPDISPATCH pDispatch;
static BYTE parms[] =
VTS_VARIANT;
InvokeHelper(0x0, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&pDispatch, parms, ——执行到这里中断
&Index);
return CsoDataset(pDispatch);
}
每次是第一次可以成功,第二次执行就出错了,我实在搞不懂,觉得程序是没问题的啊
---华软 网友回答---
不懂你的CsoDatasets是什么类,不过程序是不是应该把for语句改成
for(long i=0; i<lDtCnt; i++)呢?
---华软网友回复---
CsoDataset CsoDatasets::GetItem(const VARIANT Index)这样试试
 

---华软网友回复---
CsoDatasets是数据集集合类,是人家定义好的,我只是拿来用,下标确实是从1开始的,这个没问题。我每次运行的时候第一次能够显示对话框并完成记录添加,当关闭对话框再执行的时候就中断了
---华软网友回复---
单从你给的代码中看 应该是InvokeHelper的问题

函数中的LPDISPATCH pDispatch应该是个指针吧,先申请地址吧少年
---华软网友回复---
可是GetItem函数是人家定义好的啊,我只是拿来用,不可能改变人家的东西吧      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。