能不能干了

mufengqing 2004-03-30 03:38:25
// CardCheck.cpp : Implementation of CCardCheck

#include "stdafx.h"
#include "CardCheck.h"
#include ".\cardcheck.h"

// CCardCheck


STDMETHODIMP CCardCheck::get_CardType(BSTR* pVal)
{
// TODO: Add your implementation code here

*pVal=SysAllocString(bstrCardType);
return S_OK;
}

STDMETHODIMP CCardCheck::put_CardType(BSTR newVal)
{
// TODO: Add your implementation code here

bstrCardType=SysAllocString(newVal);
return S_OK;
}

STDMETHODIMP CCardCheck::Validate(BSTR* bstrCardNo, VARIANT* vRetVal)
{
// TODO: Add your implementation code here

int i;
int nSum;
//convert the card number from bstr to char*
int len=wcslen(bstrCardNo); //这出错啦
char * pszCardNo=new char[len+1];
int last=WideCharToMultiByte //这出错啦(CP_ACP,0,bstrCardNo,len,pszCardNo,len,0,0);
pszCardNo[last]=0;


//convert the card type from bstr to char*
len=wcslen(bstrCardType);
char * pszCardType=new char[len+1];
last=WideCharToMultiByte(CP_ACP,0,bstrCardType,len,pszCardType,len,0,0);
pszCardType[last]=0;
CString s(pszCardType);
//check if one of the acceptd card types
if(s.CompareNoCase("VISA")!=0&&s.CompareNoCase("MASTER")!=0&&s.CompareNoCase("AMEX")!=0)
{
CComVariant n(1);
*vRetVal=(VARIANT)n;
return S_OK;
}
//check if the card number is valid for visa
if (s.CompareNoCase("VISA")==0)
{
if(strlen(pszCardNo)!=13&&strlen(pszCardNo)!=16)
{
CComVariant n(1);
*vRetVal=(VARIANT)n;
return S_OK;
}
if(pszCardNo[0]!='4')
{
CComVariant n(1);
*vRetVal=(VARIANT)n;
return S_OK;
}

}

//check if the card number is valid for master
if(s.CompareNoCase("MASTER")==0)
{
if(strlen(pszCardNo)!=16)
{
CComVariant n(1);
*vRetVal=(VARIANT)n;
return S_OK;
}
if(pszCardNo[0]!='5')
{
CComVariant n(1);
*vRetVal=(VARIANT)n;
return S_OK;
}
if(pszCardNo<'1'||pszCardNo>'6')
{
CComVariant n(1);
*vRetVal=(VARIANT)n;
return S_OK;
}
}

//check if the number is valid for Amex
if(s.CompareNoCase("AMEX")==0)
{
if(strlen(pszCardNo)!=15)
{
CComVariant n(1);
*vRetVal=(VARIANT)n;
return S_OK;
}
if(pszCardNo[0]!='3')
{
CComVariant n(1);
*vRetVal=(VARIANT)n;
return S_OK;
}
if(pszCardNo!='4'&&pszCardNo!='7')
{
CComVariant n(1);
*vRetVal=(VARIANT)n;
return S_OK;
}
}

//check if the card number is valid luhn number
for(i=0,nSum=0;i<16;i+=2)
{
int nDigit=(pszCardNo[i]-48)*2;
if(nDigit<10)
{
nSum=nSum+nDigit;
}
else
{
nSum=nSum+nDigit/10;
nSum=nSum+nDigit%10;
}
nSum=nSum+(pszCardNo[i+1]-48);
}
nSum=nSum%10;
CComVariant p(nSum);
*vRetVal=(VARIANT)p;


return S_OK;
}
提示错误是下面提示
d:\LuhnChecker\CardCheck.cpp(33): error C2664: 'wcslen' : cannot convert parameter 1 from 'BSTR * ' to 'const wchar_t *'
d:\LuhnChecker\CardCheck.cpp(35): error C2664: 'WideCharToMultiByte' : cannot convert parameter 3 from 'BSTR * ' to 'LPCWSTR'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast


...全文
31 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
jnlon 2004-03-30
  • 打赏
  • 举报
回复
up 接分。。
chensan 2004-03-30
  • 打赏
  • 举报
回复
http://www.yesky.com/20021205/1642979.shtml
http://www.zdnet.com.cn/developer/tech/story/0,2000081602,39098621,00.htm

7,540

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 VC.NET
社区管理员
  • VC.NET社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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