工控编程吧
标题:
上位机MFC如何将TCHAR类型转换成BSTR类型
[打印本页]
作者:
qq263946146
时间:
2019-8-21 11:04
标题:
上位机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)。
可以在基于对话框程序中运行下面代码看效果。
#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();
}
}
复制代码
欢迎光临 工控编程吧 (https://www.gkbc8.com/)
Powered by Discuz! X3.4