ActiveX接昨天的问题,这次是SetValue()的参数的问题。

dev_uoboy 2003-10-17 05:50:48
昨天解决了一个GetValue()返回字符串的问题。

今天碰到的问题,那个ADO类一样有18个SetValue() 的重载。

我现在要在我的控件里提供一个函数,不管客户传什么类型的值都可以SetValue。

我的SetValue有两个参数,这样的SetValue(LPCSTR colname, xxxType xxx)

问题来了,我的第一个参数是列名,是字符串,第二个是用户传入的值,请问xxxType用什么类型好呢?

我先用的VARIANT var,但是好象不对,因为

void CDirectorDBAccessCtrl::SetValue(LPCTSTR strColName, VARIANT value)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());

_variant_t var(&value); //这里调用的时候居然要出错。
}

请问到底第二个参数该怎么传才对?
...全文
28 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
yushulei 2003-10-20
  • 打赏
  • 举报
回复
你用classwizard添加方法时,当你选择VARIANT 时,他在生成的函数体和声明中都会自动
添上const 和地址符的。这样也不容易出错。
DarkShow 2003-10-20
  • 打赏
  • 举报
回复
终于发现问题的关键了。对不起,没有时间回你的EMAIL。是这样的,看看你的函数声明,和实现部分。

void CDirectorDBAccessCtrl::SetValue(LPCTSTR strColName, VARIANT value//错误在这里,关键所在);
void CDirectorDBAccessCtrl::SetValue(LPCTSTR strColName, VARIANT value//错误在这里,关键所在)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());

_variant_t var(&value); //这里调用的时候居然要出错。
}

必须改成
void CDirectorDBAccessCtrl::SetValue(LPCTSTR strColName,const VARIANT & value);
void CDirectorDBAccessCtrl::SetValue(LPCTSTR strColName,const VARIANT & value)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());

_variant_t var(value);
}
warmchang 2003-10-20
  • 打赏
  • 举报
回复
嗯,这是传引用的方法实现。
xiaohyy 2003-10-18
  • 打赏
  • 举报
回复
1 第一个参数最好用BSTR
2 检查value是否为空
if( value.vt != VT_NULL && value.vt != VT_EMPTY )
{

}
warmchang 2003-10-18
  • 打赏
  • 举报
回复
??VARIANT 应该时可以的!是不是其他地方导致的错误?
dev_uoboy 2003-10-18
  • 打赏
  • 举报
回复
to:xiaohyy(醉大饿极)
还是不对啊....

dev_uoboy@163.com
dev_uoboy 2003-10-17
  • 打赏
  • 举报
回复
来人啊...

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧