rt,我写了一个dll,参数要使用BSTR和BSTR*类型的,而dll里面的字符使用的是char类型的,由于char数组中的内容有可能'\0'这样的字符,不知道要怎么讲这样的char[]转换成BSTR*
我的代码如下,
STDMETHODIMP MyPort::MyCode(BSTR strIn, int op, BSTR *strOut)
{
char key[]={0,2,0,0,4,3,5,1,9,8,0,0,9,6,1},buf[512];
char string[512];
char * stringIn = _com_util::ConvertBSTRToString(strIn); memset(string,0,sizeof(string));
memset(buf, 0, sizeof(buf));
memcpy(string,stringIn,sizeof(string)); if (op==1)
{
//下面这个函数将buf中的字符串内容转换成ASCII码二进制形式
//可能包含非可打印字符
MyTest(buf, string, sizeof(string), key, sizeof(key), ENCRYPT);
//这里将buf中存放的内容转换成BSTR
//不过转换出的字符数组可能与原字符数组不一样
*strOut=_com_util::ConvertStringToBSTR(buf);
}
......
}
我的代码如下,
STDMETHODIMP MyPort::MyCode(BSTR strIn, int op, BSTR *strOut)
{
char key[]={0,2,0,0,4,3,5,1,9,8,0,0,9,6,1},buf[512];
char string[512];
char * stringIn = _com_util::ConvertBSTRToString(strIn); memset(string,0,sizeof(string));
memset(buf, 0, sizeof(buf));
memcpy(string,stringIn,sizeof(string)); if (op==1)
{
//下面这个函数将buf中的字符串内容转换成ASCII码二进制形式
//可能包含非可打印字符
MyTest(buf, string, sizeof(string), key, sizeof(key), ENCRYPT);
//这里将buf中存放的内容转换成BSTR
//不过转换出的字符数组可能与原字符数组不一样
*strOut=_com_util::ConvertStringToBSTR(buf);
}
......
}
BSTR bstr = str.AllocSysString();
这样就行了。
反过来,
CString tmpstr = bstr,就可以将BSTR转换成CString类型,
而(LPCTSTR)tmpstr可以返回char*类型的字符串。
改你的dll参数吧。