能不能干了
#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
相关推荐
你能不能像打游戏一样干工作?
奇虎360董事长周鸿祎说,年轻人打游戏不是一件坏事,但是一个人应该要把握住自己,反而要像主动升级打怪那样,对自己的工作和学习,充满激情的进行自我目标认定、自我激励。如果你把本文当作纯鸡汤,那你就浪费周总的用心了。
织梦城市分站怎么安装织梦二级域名站群织梦制作企业分站教程
② 修改伪静态内容:复制截图中的两条伪静态出来,在另取一行黏贴,把fenzhan改成上面第①点说到的默认【默认的名称】,如果默认的名称为abc,就把abc复制黏贴上去,如果是abc/def就把abc/def复制黏贴上去,注意后面的ID要和你新创建的栏目ID一样。① 创建栏目的时候【文件保存目录】的名称要复制到【默认的名称】栏目,复制下去的目录名称前后不需要加“/”,二级栏目的也是一样的方式复制;然后研究下面的代码,把织梦对应的默认标签修改成下面的调用标签就可以。其他的环境的伪静态可能会出翻页的bug。
织梦网做城市分站织梦分站群二级目录织梦城市分站教程
可以参考http://www.hlzcb.com/zhimengxueyuan/zhimenganzhuangshiyong/25830.html。想要增加修改城市 找到 mycity—city.php 想要添加自己的城市站点 还需要看下 pinyin.txt 有没有对应的拼音。其他的环境的伪静态可能会出现城市分站翻页的bug。1、上传到服务器上输入www.xxxx.com/install进行安装(具体安装方法找百度一大堆);②如果是IIS的服务器直接导入.htaccess规则,具体导入方法百度找找。
PCB制程干膜贴膜工艺介绍
目前被使用的干膜有好几个品牌,不同的品牌在贴膜时的参数略有不同,不同批次的干膜贴膜的参数也略不同,具体的参数需与厂商沟通并根据自己设备的情况做调整。
PCB制成干膜贴膜技术介绍
干膜贴膜时,先从干膜上剥下聚乙烯保护膜,然后在加热加压的条件下将干膜抗蚀剂粘贴在覆铜箔板上。干膜中的抗蚀剂层受热后变软,流动性增加,借助于热压辊的压力和抗蚀剂中粘结剂的作用完成贴膜。贴膜通常在贴膜机上完成,贴膜机型号繁多,但基本结构大致相同,一般贴膜可连续贴,也可单张贴。


VC.NET
