运用OPENSSL的EVP_EncodeBlock函数进行BASE64编码的困惑

使用OPENSSL的EVP_EncodeBlock函数进行BASE64编码的困惑。
我的代码如下,第一种写法的结果正常,可是第二种写法产生的结果每次都不一样,为什么,有没有人遇到类似问题。
写法一:
EVP_EncodeBlock(outBuffer,(unsigned char*)"发布会由中国电子学会副秘书长",outlen);
写法二:
CString str="发布会由中国电子学会副秘书长";
EVP_EncodeBlock(outBuffer,(unsigned char*)str.GetBuffer(str.GetLength()),outlen);

是不是因为第二个参数要求是常数所致。

------解决方案--------------------
CString这东西不太可靠,他自动维护ansi与unicode,同样的字符串,char[]存储与cstring存储,其格式可能是不一样的,而base64编码输入只认二进制。