【CSDN】【VC调用VB组件接口方法时的参数转换问题】

drillmaster7 2003-10-20 04:09:02
在VB组件中有如下这一接口方法
Public Function validate(strAccountNumber As String, mCash As Currency) As Boolean
If strServerName = "" Then
getSQLServerName
End If
Call connectionSQLServer
If rsCheckAccount.State = 1 Then rsCheckAccount.Close
rsCheckAccount.CursorLocation = adUseClient
strSql = "select * from Customer where cAccountNumber ='" & strAccountNumber & "'"
rsCheckAccount.Open strSql, conCheckAccount, adOpenDynamic, adLockOptimistic
If rsCheckAccount.RecordCount > 0 Then
rsCheckAccount.MoveFirst
validate = Credit(rsCheckAccount("cAccountTypeID"), mCash, rsCheckAccount("mAccountBalance"))
Else
strError = "帐号非法"
validate = False
End If
End Function

VC中进行如下调用
void CZjyDlg::OnButton1()
{
// TODO: Add your control notification handler code here
HRESULT hr=CoInitialize(NULL);
CLSID clsid;
hr=CLSIDFromProgID(OLESTR("CheckAccountDll.CheckAccount"),&clsid);
_checkAccount * ckptr;
hr=CoCreateInstance(clsid,NULL,CLSCTX_INPROC_SERVER,__uuidof(_checkAccount),(LPVOID *)&ckptr);
if(FAILED(hr))
{
AfxMessageBox("Failed");
return;
}
char cAccountType[4];
int iCash;
GetDlgItemText(IDC_EDIT1,cAccountType,4);
iCash=GetDlgItemInt(IDC_EDIT2);

long lStatus;
lStatus=ckptr->validate(_bstr_t(cAccountType),iCash);
if(lStatus==1)
AfxMessageBox("ok");
else
AfxMessageBox("bad");
CoUninitialize();
}
出现如下错误
E:\zjy\zjyDlg.cpp(193) : error C2664: 'validate' : cannot convert parameter 1 from 'class _bstr_t' to 'unsigned short ** '
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called

请问VC中的
ckptr->validate(_bstr_t(cAccountType),iCash);
这句如何写法,参数是怎么转换的
...全文
34 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
drillmaster7 2003-10-20
  • 打赏
  • 举报
回复
调试通过了,可是不明白,在VB中明明都能正常调用的情况,在VC中调用不行了
AfxMessageBox("bad");

我输入的都是有效的数据,也是输出这一句,是不是哪里的参数不对
drillmaster7 2003-10-20
  • 打赏
  • 举报
回复
谢谢各位,但是进行了如上操作后,为什么总是输出
AfxMessageBox("Failed");

为什么呀?
hacker007 2003-10-20
  • 打赏
  • 举报
回复
void CZjyDlg::OnButton1()
{
// TODO: Add your control notification handler code here
HRESULT hr=CoInitialize(NULL);
CLSID clsid;
hr=CLSIDFromProgID(OLESTR("CheckAccountDll.CheckAccount"),&clsid);
_checkAccount * ckptr;
hr=CoCreateInstance(clsid,NULL,CLSCTX_INPROC_SERVER,__uuidof(_checkAccount),(LPVOID *)&ckptr);
if(FAILED(hr))
{
AfxMessageBox("Failed");
return;
}
char cAccountType[20];
int iCash;
GetDlgItemText(IDC_EDIT1,cAccountType,4);
iCash=GetDlgItemInt(IDC_EDIT2);

BSTR bstAccountType = _bstr_t(cAccountType);
CY cCash = COleCurrency(iCash, 0);

long lStatus;
lStatus=ckptr->validate(&bstAccountType, &cCash);
if(lStatus==1)
AfxMessageBox("ok");
else
AfxMessageBox("bad");
CoUninitialize();
}
蒋晟 2003-10-20
  • 打赏
  • 举报
回复
你的控件的ODL怎么声明'validate' 方法的?
bcpl 2003-10-20
  • 打赏
  • 举报
回复
BSTR bs = _bstr_t(cAccountType);
CY cy = COleCurrency(iCash, 0);
lStatus = ckptr->validate(&bs, &cy);

3,245

社区成员

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

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