关于控件接口的问题

Nosoft12345 2015-10-12 10:04:31
写了个小控件activeX. 程序用的unicode编码

有一个接口是:VARIANT_BOOL ED_BaseCode(BSTR strCode , BSTR * strRtnCode)
{
////一些处理,得出一个字节数组BYTE strByteData[16]//这里大小 16 没问题

char * base64Encode = base64_encode((const char *)sy_cipher,16);
CString strRtn = A2W((char*)sy_cipher);
*strRtnCode= strRtn.AllocSysString();
//这里另外一种改进CComBSTR aa copyto 方法也用过,情况与上面的一样
}

//这里相当与对上面的进行解码 strCode === 是上面接口的出参值
另外一个接口是:VARIANT_BOOL ED_BaseDeEncode(BSTR strCode , BSTR * strRtnCode)
{
//一些处理
CString strData = strCode ;
char * porgData = W2A(strData .GetBuffer());
int ilen = strlen(porgData);
char *base64DeEncode = base64_decode(porgData,ilen);
//到这里,base64DeEncode 这个值,就与上面接口传出的值 就不一样了。通过跟踪,发现少了一个一字节
//说明下,可能大家伙会认为我内存分配少了,事实不是这样的,换成其他的数据可能少好几个字节


}



===下面是测试ocx的demo调用
首先是调用第一个接口 ED_BaseCode
//m_ocx关联ocx控件
BSTR bb;
m_ocx.ED_BaseCode(L"111",&bb);
USES_CONVERSION;
CString cstr1 =pp;
strJMEdData =cstr1;
//strJMEdData 是成员变量CString类型 在后台要调用到

===========================
然后是调用第二个接口ED_BaseDeEncode
BSTR ppp ;
m_GM.DeEncryptData(strJMEdData,L"111111",&ppp);
//strJMEdData就是上面赋值的数据在这里调用
================================

代码跟踪后,在ocx里代码里跟踪,数据就与之前返回的不一样了

...全文
113 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
boylafong 2015-10-12
  • 打赏
  • 举报
回复
好象是位不对
Nosoft12345 2015-10-12
  • 打赏
  • 举报
回复
over了
必须采用base64位编码,不然就会出现这样的问题

3,248

社区成员

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

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