现有以下程序:
short CDataTypeCtrl::TransferData(BSTR FAR* bstVal) 
{
// TODO: Add your dispatch handler code here
    char  chData[20]="\x30\x20\x00\x00\x39\x36\x00\x39";    *bstVal = AsciiToBSTR(chData); return 0;
}
BSTR AsciiToBSTR(const char* pszFName) 

if (NULL == pszFName)
{
return NULL;
} if ( strlen(pszFName) <= 0 )
{
return NULL;
}
    int len; 
    WCHAR wszURL[MAX_PATH]; 
    len = ::MultiByteToWideChar(CP_ACP, 0, pszFName, -1, wszURL, MAX_PATH);     
    return SysAllocString(wszURL); 

跟踪发现在MultiByteToWideChar转换到第三个字符就中断了,我应该怎么办????大虾们快快救救我!!

解决方案 »

  1.   

    我现在主要是把一串事有结束符的数据传出去,我记得BSTR类型就是为了避免#0做结束符而做的,所以肯定有办法,各位大虾救我
      

  2.   

    BSTR SysAllocStringLen( 
      const OLECHAR *  pch, 
      unsigned int  cch  
    );
      

  3.   

    怎么把一个char指针转为OLECHAR,不用MultiByteToWideChar行吗?
      

  4.   

    BSTR SysAllocString( 
      const OLECHAR *  sz  
    );
    将String转换成为BSTR
    用后需要释放内存
    SysFreeString
      

  5.   

    不是MultiByteToWideChar的问题, 
    BSTR AsciiToBSTR(const char* pszFName) 
    是参数const char* pszFName不能传递0
      

  6.   

    你怎么那么笨呢?都告诉你用SysAllocStringLen了。