欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

pocketbuilder 调用wince api参数传递有关问题

更新时间: 2014-01-05 03:10:33 责任编辑: Author_N1

 

PocketBuilder 调用WINCE API参数传递问题
大家好,有家客户用PocketBuilder开发WINCE6.0设备的应用程序,需要调用到我们提供dll的接口,比如:
int RF_ISO14443A_authentication(int iMode, int iBlock, UINT8 *pszKey, int iLenKey)
客户在传递第3个参数的时候遇到问题,这里的UINT8等同于unsigned char,客户的应用程序的对此参数的引入和定义如下:
FUNCTION integer RF_ISO14443A_authentication(int iMode,int iBlock,ref string pszKey, int iLenKey) library "DeviceAPI.dll"

string key_s1,key_s2=space(100)
string is_key='A1B2C3'
key_s1= is_key
key_s2 = f_hex_string(key_s1)

ll_i = RF_ISO14443A_authentication(0,8,key_s2,6)

WINCE 此API的一部分如下:
extern "C" DEVICEAPI_API int RF_ISO14443A_authentication(int iMode, int iBlock, UINT8 *pszKey, int iLenKey)
{
UINT8 i=0;
for(i=0;i<iLenKey;i++)
{
RETAILMSG(DEBUG, (TEXT("RF_ISO14443A_authentication()  pszKey[%d]=0x%x\r\n"),i,pszKey[i]));
}
return ISO14443A_authentication(iMode, iBlock, pszKey, iLenKey);
}

调试口输出的信息如下:
RF_ISO14443A_authentication()  pszKey[0]=0xa1
RF_ISO14443A_authentication()  pszKey[1]=0x0
RF_ISO14443A_authentication()  pszKey[2]=0xb2
RF_ISO14443A_authentication()  pszKey[3]=0x0
RF_ISO14443A_authentication()  pszKey[4]=0xc3
RF_ISO14443A_authentication()  pszKey[5]=0x0
应用层想传递的值是“A1B2C3”,为什么WINCE API这边却多了0x0,在此向大家请教了。
--参考方法--
RF_ISO14443A_authentication(0,8,key_s2,6)
这个函数之前,内存里key_s2它存储的是啥?
我觉得应该跟你打印的是一样的,如果一样的话就是转换的问题罗。
--参考方法--
高位为零,是不是传递了unicode编码哦
--参考方法--
更正一点,传送的也不是unicode,ascii码才会是高位为0,低位要小于128。更象是f_hex_string转换的问题。
这个看谁适配谁了,双方做好约定,按照约定进行处理。
--参考方法--
key_s2 = f_hex_string(key_s1)
这个处理获取是unicode
你讲接口参数类型改成WCHAR试试看。
--参考方法--
引用:
string 跟接收的类型UINT8* 一样吗?我估计在CE下应该是有差别的吧


引用:
UINT8* is_key='A1B2C3'
用这个试试就知道了


string 这个本身是unicode类型的。所以就不能用这个类型。
要用类是byte[]这样的类型吧。encoding.ascii.getbytes(string)不过这时c#的。
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 03:10:33
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/19168/
本文WWW.DOC100.NET DOC100.NET版权所有。