描述:
我的目的,把一个md5加密的函数封装成VB中能用的dll,下面先说问题,后附代码
接口定义
[id(1), helpstring("方法MDString")] HRESULT MDString([in] BSTR sString, [out,retval] BSTR* rString);
1、传入参数问题,我想实现传入参数是值传递的一个字符串,是不是应该用BSTR
2、BSTR转换为char*问题我是这样解决的,不知对不对
先 #include <atlbase.h>
程序中
char* string;
string= OLE2A( sString );
3、返回字符串我是用 *rString=A2W(m_output); ,对不对? m_output是存字符串的CHAR数组
4、vb调用之后,出错,debug显示的错误信息是 stack around the variable "output1" was corrupted,不知道什么意思,具体请看下面代码
下面是代码,不算长,请大家帮忙仔细看看,千万分感谢!!
STDMETHODIMP Cmd5::MDString(BSTR sString, BSTR* rString)
{
// TODO: 在此添加实现代码
MD5_CTX context;
unsigned char digest[16];
char output1[32];
//这是将BSTR转换为Char*的
char* string;
USES_CONVERSION;
string= OLE2A( sString );
unsigned int len = (unsigned int)strlen(string);
int i;
MD5Init(&context);
MD5Update(&context, (unsigned char*)string, len);
MD5Final(digest, &context);
for(i = 0; i < 16; i++)
{
sprintf(&(output1[2*i]), "%02x", (unsigned char)digest[i]);
sprintf(&(output1[2*i+1]), "%02x", (unsigned char)(digest[i]<<4));
}
for(i = 0; i < 32; i++)
{
m_output[i] = output1[i];
}
m_output[32] = '\0';
*rString=A2W(m_output);
return S_OK;
}