关于控件接口的有关问题

关于控件接口的问题
写了个小控件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里代码里跟踪,数据就与之前返回的不一样了


------解决思路----------------------
好象是位不对