这里先看下两个类型。
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)。
可以在基于对话框程序中运行下面代码看效果。
- #include <comdef.h>
- void CGkbc8Dlg::OnPaint()
- {
- if (IsIconic())
- {
- CPaintDC dc(this); // device context for painting
- SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
- // Center icon in client rectangle
- int cxIcon = GetSystemMetrics(SM_CXICON);
- int cyIcon = GetSystemMetrics(SM_CYICON);
- CRect rect;
- GetClientRect(&rect);
- int x = (rect.Width() - cxIcon + 1) / 2;
- int y = (rect.Height() - cyIcon + 1) / 2;
- // Draw the icon
- dc.DrawIcon(x, y, m_hIcon);
- }
- else
- {
- CPaintDC dc(this);
- TCHAR sz[] = _T("Hello world!");
- //调用ConvertStringToBSTR函数
- BSTR bstr1 = _com_util::ConvertStringToBSTR(sz);
- //使用_bstr_t
- BSTR bstr2 = _bstr_t(sz);
- CString strText = _T("");
- strText.Format(_T("bstr1 = %s"), (CString)bstr1);
- dc.TextOut(100, 50, strText);
- strText.Format(_T("bstr2 = %s"), (CString)bstr2);
- dc.TextOut(100, 100, strText);
- CDialog::OnPaint();
- }
- }
复制代码
|