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);
}
         ......
}

解决方案 »

  1.   

    CString str = "aaa";
    BSTR bstr = str.AllocSysString();
    这样就行了。
    反过来,
    CString tmpstr = bstr,就可以将BSTR转换成CString类型,
    而(LPCTSTR)tmpstr可以返回char*类型的字符串。
      

  2.   

    这个我知道阿,现在的问题是,在char str[256]中包含了类似于'\0'之类的字符,这些都是不能在CString中使用的吧
      

  3.   

    字符串的结束符就是'\0',无论你怎么做,到'\0',就截断了。
    改你的dll参数吧。