VCデータ型使用変換祥解
23928 ワード
//////////////////////////////////
CString -> char*
//////////////////////////////////
#include "atlbase.h"
CString strTmp;
char* cpTmp;
USES_CONVERSION
cpTmp=T2A(strTmp);
//////////////////////////////////
!!!!
//////////////////////////////////
VC , 。
int i = 100;
long l = 2001;
float f=300.2;
double d=12345.119;
char username[]=" ";
char temp[200];
char *buf;
CString str;
_variant_t v1;
_bstr_t v2;
、
(int)
itoa(i,temp,10);/// i temp ,
itoa(i,temp,2); ///
(long)
ltoa(l,temp,10);
、
CString
str = "2008 ";
buf = (LPSTR)(LPCTSTR)str;
BSTR _variant_t
v1 = (_bstr_t)" ";
buf = _com_util::ConvertBSTRToString((_bstr_t)v1);
、
strcpy(temp,"123");
(int)
i = atoi(temp);
(long)
l = atol(temp);
(double)
d = atof(temp);
、 CString
CString Format , :
(int)
str.Format("%d",i);
(float)
str.Format("%f",i);
(char *) CString
str = username;
、BSTR、_bstr_t CComBSTR
CComBSTR、_bstr_t BSTR ,BSTR 32 。
char * BSTR : BSTR b=_com_util::ConvertStringToBSTR(" ");/// comutil.h
char *p=_com_util::ConvertBSTRToString(b);
、VARIANT 、_variant_t COleVariant
VARIANT VC98/Include/OAIDL.H tagVARIANT 。
VARIANT : vt , , , :
VARIANT va;
int a=2001;
va.vt=VT_I4;///
va.lVal=a; ///
VARIANT, Void VariantInit(VARIANTARG FAR* pvarg); , vt VT_EMPTY, vt :
unsigned char bVal; VT_UI1
short iVal; VT_I2
long lVal; VT_I4
float fltVal; VT_R4
double dblVal; VT_R8
VARIANT_BOOL boolVal; VT_BOOL
SCODE scode; VT_ERROR
CY cyVal; VT_CY
DATE date; VT_DATE
BSTR bstrVal; VT_BSTR
IUnknown FAR* punkVal; VT_UNKNOWN
IDispatch FAR* pdispVal; VT_DISPATCH
SAFEARRAY FAR* parray; VT_ARRAY|*
unsigned char FAR* pbVal; VT_BYREF|VT_UI1
short FAR* piVal; VT_BYREF|VT_I2
long FAR* plVal; VT_BYREF|VT_I4
float FAR* pfltVal; VT_BYREF|VT_R4
double FAR* pdblVal; VT_BYREF|VT_R8
VARIANT_BOOL FAR* pboolVal; VT_BYREF|VT_BOOL
SCODE FAR* pscode; VT_BYREF|VT_ERROR
CY FAR* pcyVal; VT_BYREF|VT_CY
DATE FAR* pdate; VT_BYREF|VT_DATE
BSTR FAR* pbstrVal; VT_BYREF|VT_BSTR
IUnknown FAR* FAR* ppunkVal; VT_BYREF|VT_UNKNOWN
IDispatch FAR* FAR* ppdispVal; VT_BYREF|VT_DISPATCH
SAFEARRAY FAR* FAR* pparray; VT_ARRAY|*
VARIANT FAR* pvarVal; VT_BYREF|VT_VARIANT
void FAR* byref; VT_BYREF
_variant_t VARIANT , , 。
:
long l=222;
ing i=100;
_variant_t lVal(l);
lVal = (long)i;
COleVariant _variant_t , :
COleVariant v3 = " ", v4 = (long)1999;
CString str =(BSTR)v3.pbstrVal;
long i = v4.lVal;
、
WPARAM LPARAM 32 (DWORD) 16 (WORD), :
LPARAM lParam;
WORD loValue = LOWORD(lParam);/// 16
WORD hiValue = HIWORD(lParam);/// 16
16 (WORD) 8 (BYTE), :
WORD wValue;
BYTE loValue = LOBYTE(wValue);/// 8
BYTE hiValue = HIBYTE(wValue);/// 8
、BSTR、LPSTR LPWSTR
Visual C++.NET , , BSTR、LPSTR LPWSTR 。 , ANSI、Unicode (MBCS) 。
BSTR、LPSTR LPWSTR ?
BSTR(Basic STRing,Basic ) OLECHAR* Unicode 。 。 API ( SysAllocString) , BSTR COM , 。 1 BSTR , DWORD , Unicode 。
LPSTR LPWSTR Win32 VC++ 。LPSTR NULL(‘/0’) 8 ANSI , LPWSTR NULL 16 。 VC++ , , LPTSTR、LPCTSTR , 2 。
,LPCTSTR “long pointer to a constant generic string”, “ ”, C/C++ const char* , LPTSTR char*。
, :
#ifdef UNICODE
typedef LPWSTR LPTSTR;
typedef LPCWSTR LPCTSTR;
#else
typedef LPSTR LPTSTR;
typedef LPCSTR LPCTSTR;
#endif
、CString、CStringA CStringW
Visual C++.NET CStringT ATL MFC “ ” , CString、CStringA CStringW , 。 TCHAR、char wchar_t。TCHAR Unicode WCHAR(16 Unicode ), ANSI char。wchar_t unsigned short。 CString MFC , 。
、VARIANT、COleVariant _variant_t
OLE、ActiveX COM ,VARIANT , , , 。 OAIDL.H VARIANT :
struct tagVARIANT {
VARTYPE vt;
union {
short iVal; // VT_I2.
long lVal; // VT_I4.
float fltVal; // VT_R4.
double dblVal; // VT_R8.
DATE date; // VT_DATE.
BSTR bstrVal; // VT_BSTR.
…
short * piVal; // VT_BYREF|VT_I2.
long * plVal; // VT_BYREF|VT_I4.
float * pfltVal; // VT_BYREF|VT_R4.
double * pdblVal; // VT_BYREF|VT_R8.
DATE * pdate; // VT_BYREF|VT_DATE.
BSTR * pbstrVal; // VT_BYREF|VT_BSTR.
};
};
,VARIANT C , vt、 union 。 , vt VT_I2, iVal VARIANT 。 , VARIANT , 。 :
VARIANT va;
:: VariantInit(&va); //
int a = 2002;
va.vt = VT_I4; // long
va.lVal = a; //
VARIANT ,Windows :
VariantInit —— VT_EMPTY;
VariantClear —— VARIANT;
VariantChangeType —— VARIANT ;
VariantCopy —— VARIANT VARIANT。
COleVariant VARIANT 。 , VariantInit , , VariantCopy , VARIANT , , VariantClear, 。 ,COleVariant VARIANT 。 :
COleVariant v1("This is a test"); //
COleVariant v2 = "This is a test";
// VT_BSTR , "This is a test"
COleVariant v3((long)2002);
COleVariant v4 = (long)2002;
// VT_I4 , 2002
_variant_t COM VARIANT , COleVariant 。 Visual C++.NET MFC :
#include "comutil.h"
#pragma comment( lib, "comsupp.lib" )
、CComBSTR _bstr_t
CComBSTR BSTR ATL , 。 :
CComBSTR bstr1;
bstr1 = "Bye"; //
OLECHAR* str = OLESTR("ta ta"); // 5
CComBSTR bstr2(wcslen(str)); // 5
wcscpy(bstr2.m_str, str); // BSTR
CComBSTR bstr3(5, OLESTR("Hello World"));
CComBSTR bstr4(5, "Hello World");
CComBSTR bstr5(OLESTR("Hey there"));
CComBSTR bstr6("Hey there");
CComBSTR bstr7(bstr6);
// , "Hey there"
_bstr_t C++ BSTR , SysAllocString SysFreeString , BSTR API 。 _variant_t , comutil.h comsupp.lib。
、BSTR、char* CString
(1) char* CString
char* CString, , CString::Format 。 :
char chArray[] = "This is a test";
char * p = "This is a test";
LPSTR p = "This is a test";
Unicode
TCHAR * p = _T("This is a test");
LPTSTR p = _T("This is a test");
CString theString = chArray;
theString.Format(_T("%s"), chArray);
theString = p;
(2) CString char*
CString char*(LPSTR) , :
, 。 :
CString theString( "This is a test" );
LPTSTR lpsz =(LPTSTR)(LPCTSTR)theString;
, strcpy。 :
CString theString( "This is a test" );
LPTSTR lpsz = new TCHAR[theString.GetLength()+1];
_tcscpy(lpsz, theString);
,strcpy( Unicode/MBCS _tcscpy) const wchar_t* (Unicode) const char* (ANSI), 。
, CString::GetBuffer。 :
CString s(_T("This is a test "));
LPTSTR p = s.GetBuffer();
// p
if(p != NULL) *p = _T('/0');
s.ReleaseBuffer();
// , CString
(3) BSTR char*
, ConvertBSTRToString。 :
#include
#pragma comment(lib, "comsupp.lib")
int _tmain(int argc, _TCHAR* argv[]){
BSTR bstrText = ::SysAllocString(L"Test");
char* lpszText2 = _com_util::ConvertBSTRToString(bstrText);
SysFreeString(bstrText); //
delete[] lpszText2;
return 0;
}
, _bstr_t 。 :
_bstr_t b = bstrText;
char* lpszText2 = b;
(4) char* BSTR
, SysAllocString API 。 :
BSTR bstrText = ::SysAllocString(L"Test");
BSTR bstrText = ::SysAllocStringLen(L"Test",4);
BSTR bstrText = ::SysAllocStringByteLen("Test",4);
, COleVariant _variant_t。 :
//COleVariant strVar("This is a test");
_variant_t strVar("This is a test");
BSTR bstrText = strVar.bstrVal;
, _bstr_t, 。 :
BSTR bstrText = _bstr_t("This is a test");
, CComBSTR。 :
BSTR bstrText = CComBSTR("This is a test");
CComBSTR bstr("This is a test");
BSTR bstrText = bstr.m_str;
, ConvertStringToBSTR。 :
char* lpszText = "Test";
BSTR bstrText = _com_util::ConvertStringToBSTR(lpszText);
(5) CString BSTR
CStringT::AllocSysString 。 :
CString str("This is a test");
BSTR bstrText = str.AllocSysString();
…
SysFreeString(bstrText); //
(6) BSTR CString
:
BSTR bstrText = ::SysAllocString(L"Test");
CStringA str;
str.Empty();
str = bstrText;
CStringA str(bstrText);
(7) ANSI、Unicode
, MultiByteToWideChar ANSI Unicode , WideCharToMultiByte Unicode ANSI 。
, “_T” ANSI “ ” , “L” ANSI Unicode, C++ S ANSI String* 。 :
TCHAR tstr[] = _T("this is a test");
wchar_t wszStr[] = L"This is a test";
String* str = S”This is a test”;
, ATL 7.0 。ATL7.0 3.0 , 3 :
, C “ ”, ATL 3.0 , C ,2 “to”,EX 。SourceType DestinationType A、T、W OLE, ANSI、Unicode、“ ” OLE 。 ,CA2CT ANSI 。 :
LPTSTR tstr= CA2TEX<16>("this is a test");
LPCTSTR tcstr= CA2CT("this is a test");
wchar_t wszStr[] = L"This is a test";
char* chstr = CW2A(wszStr);