QQ登录

只需一步,快速开始

上位机MFC如何将TCHAR类型转换成BSTR类型

[ 复制链接 ]
这里先看下两个类型。
LPTSTR
LPCTSTR
"LP"前缀是历史遗留的,在Win32下就是 P ,代表指针的含义。
"C"代表const
"T"的含义就是如果定义了UNICODE,它就是宽字符版本,否则就是Ansi版本。
STR表示字符串string.


另一个类型,BSTR。
BSTR实际上就是一个COM字符串,
标准BSTR是一个有长度前缀和null结束符的OLECHAR数组。
BSTR的前4字节是一个表示字符串长度的前缀。
BSTR长度域的值是字符串的字节数,并且不包括0结束符。


如果定义了一个宽字符变量
TCHAR sz[] = _T("Hello world!");
可以通过两种方式转换为BSTR,记得包含#include <comdef.h>
        BSTR bstr1 = _com_util::ConvertStringToBSTR(sz);
        //使用_bstr_t
        BSTR bstr2 = _bstr_t(sz);

要转换加CString,可以显示的转换 (CString)bstr1)。
可以在基于对话框程序中运行下面代码看效果。
  1. #include <comdef.h>
  2. void CGkbc8Dlg::OnPaint()
  3. {
  4.         if (IsIconic())
  5.         {
  6.                 CPaintDC dc(this); // device context for painting

  7.                 SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

  8.                 // Center icon in client rectangle
  9.                 int cxIcon = GetSystemMetrics(SM_CXICON);
  10.                 int cyIcon = GetSystemMetrics(SM_CYICON);
  11.                 CRect rect;
  12.                 GetClientRect(&rect);
  13.                 int x = (rect.Width() - cxIcon + 1) / 2;
  14.                 int y = (rect.Height() - cyIcon + 1) / 2;

  15.                 // Draw the icon
  16.                 dc.DrawIcon(x, y, m_hIcon);
  17.         }
  18.         else
  19.         {
  20.                 CPaintDC dc(this);
  21.         TCHAR sz[] = _T("Hello world!");

  22.         //调用ConvertStringToBSTR函数
  23.         BSTR bstr1 = _com_util::ConvertStringToBSTR(sz);
  24.         //使用_bstr_t
  25.         BSTR bstr2 = _bstr_t(sz);

  26.         CString strText = _T("");
  27.         strText.Format(_T("bstr1 = %s"),  (CString)bstr1);
  28.         dc.TextOut(100, 50, strText);
  29.         strText.Format(_T("bstr2 = %s"),  (CString)bstr2);
  30.         dc.TextOut(100, 100, strText);


  31.                 CDialog::OnPaint();
  32.         }
  33. }
复制代码



回复

使用道具 举报

快速回复 返回列表 客服中心 搜索