当前位置: 首页 > news >正文

网站建设公司华网天茌平网页定制

网站建设公司华网天,茌平网页定制,郑州金水区网站建设,免费网站建设资讯一#xff0e;VC常用数据类型列表 二#xff0e;常用数据类型转化 2.1数学类型变量与字符串相互转换 2.2 CString及string,char *与其他数据类型的转换和操作 ●CString,string,char*的综合比较 ●数学类型与CString相互转化 ●CString与char*相互转换举例 ●CString 与 BSTR… 一VC常用数据类型列表 二常用数据类型转化 2.1数学类型变量与字符串相互转换 2.2 CString及string,char *与其他数据类型的转换和操作 ●CString,string,char*的综合比较 ●数学类型与CString相互转化 ●CString与char*相互转换举例 ●CString 与 BSTR 型转换 ●VARIANT 型转化成 CString 型 2.3 BSTR、_bstr_t与CComBSTR 2.4 VARIANT 、_variant_t 与 COleVariant 附录CString及字符串转及操作详解 参考书籍:CSDN,MFC深入浅出(Second Edit) 一VC常用数据类型列表 Type Default Size Description         基 础 类 型   全 是 小 写   说明:这些基础数据类型对于MFC还是API都是被支持的 boolean unsigned 8 bit , 取值TRUE/FALSE byte unsigned 8 bit, 整数,输出按字符输出 char unsigned 8 bit, 字符 double signed 64 bit 浮点型 float signed32 bit 浮点型 handle_t   Primitive handle type hyper signed 64 bit 整型 int signed 32 bit 整型 long signed 32 bit 整型 short signed 16 bit 整型 small signed 8 bit 整型 void * 32-bit 指向未知类型的指针 wchar_t unsigned 16 bit 16位字符,比char可容纳更多的字符       Win32 API 常 用 数 据 类 型   全 大 写 说明: 这些Win32API支持的简单数据类型主要是用来定义函数返回值消息参数结构成员。这类数据类型大致可以分为五大类字符型、布尔型、整型、指针型和句柄型?. 总共大概有100多种不同的类型 BOOL/BOOLEAN 8bit,TRUE/FALSE 布尔型 BYTE unsigned 8 bit   BSTR CComBSTR _bstr_t 32 bit BSTR是指向字符串的32位指针 是对BSTR的封装 是对BSTR的封装 CHAR 8 bit (ANSI字符类型 COLORREF 32 bit RGB颜色值 整型 DWORD unsigned 32 bit 整型 FLOAT float型 float型 HANDLE   Object句柄 HBITMAP   bitmap句柄 HBRUSH   brush句柄 HCURSOR   cursor句柄 HDC   设备上下文句柄 HFILE   OpenFile打开的File句柄 HFONT   font句柄 HHOOK   hook句柄 HKEY   注册表键句柄 HPEN   pen句柄 HWND   window句柄 INT -------- -------- LONG -------- --------- LONGLONG   64位带符号整型 LPARAM 32 bit 消息参数 LPBOOL   BOOL型指针 LPBYTE   BYTE型指针 LPCOLOREF   COLORREF型指针 LPCSTR/LPSTR/PCSTR   指向8位ANSI字符串类型指针 LPCWSTR/LPWSTR/PCWSTR   指向16位Unicode字符串类型 LPCTSTR/LPTSTR/PCTSTR   指向一8位或16位字符串类型指针 LPVOID   指向一个未指定类型的32位指针 LPDWORD   指向一个DWORD型指针 其他相似类型: LPHANDLE、LPINT、LPLONG、LPWORD、LPRESULT PBOOL、PBOOLEAN、PBYTE、PCHAR、PDWORD、PFLOAT、PHANDLE、PINT、PLONG、PSHORT…… 说明:(1)在16位系统中 LP为16bit,P为8bit,在32位系统中都是32bit(此时等价) (2)LPCSTR等 中的C指Const,T表示TCHAR模式即可以工作在ANSI下也可UNICODE SHORT usigned 整型 其他UCHAR、UINT、ULONG、ULONGLONG、USHORT为无符号相应类型 TBYTE   WCHAR型或者CHAR型 TCHAR   ANSI与unicode均可 VARIANT _variant_t COleVariant   一个结构体参考OAIDL.H _variant_t是VARIANT的封装类 COleVariant也是VARIANT的封装类             WNDPROC   指向一个窗口过程的32位指针 WCHAR   16位Unicode字符型 WORD   16位无符号整型 WPARAM   消息参数 MFC 独有 数据 类型 下面两个数据类型是微软基础类库中独有的数据类型 POSITION 标记集合中一个元素的位置的值,被MFC中的集合类所使用 LPCRECT 指向一个RECT结构体常量不能修改的32位指针 CString 其实是MFC中的一个类       说明: (1)-------表示省略 (2)1Byte8Bit, 字与机器有关,在8位系统中:字1字节,16位系统中,1字2字节32位中:1字4字节, 64位中1字8字节.不要搞混这些概念. 二常用数据类型转化及操作 21 数学类型变量与字符串相互转换(这些函数都在STDLIB.H里) 1将数学类型转换为字符串可以用以下一些函数: 举例: _CRTIMP char * __cdecl _itoa(int, char *, int);//这是一个将数字转换为一个字符串类型的函数,最后一个int表示转换的进制 如以下程序: int iTyep3; char *szChar; itoa(iType,szChar,2); coutszChar;//输出为1010 类似函数列表: _CRTIMP char * __cdecl _itoa(int, char *, int);//为了完整性,也列在其中 _CRTIMP char * __cdecl _ultoa(unsigned long, char *, int); _CRTIMP char * __cdecl _ltoa(long, char *, int); _CRTIMP char * __cdecl _i64toa(__int64, char *, int); _CRTIMP char * __cdecl _ui64toa(unsigned __int64, char *, int); _CRTIMP wchar_t * __cdecl _i64tow(__int64, wchar_t *, int); _CRTIMP wchar_t * __cdecl _ui64tow(unsigned __int64, wchar_t *, int); _CRTIMP wchar_t * __cdecl _itow (int, wchar_t *, int);//转换为长字符串类型 _CRTIMP wchar_t * __cdecl _ltow (long, wchar_t *, int); _CRTIMP wchar_t * __cdecl _ultow (unsigned long, wchar_t *, int); 还有很多,请自行研究 2将字符串类型转换为数学类型变量可以用以下一些函数: 举例: _CRTIMP int  __cdecl atoi(const char *);//参数一看就很明了 char *szChar”88”; int temp(0); tempatoi(szChar); couttemp; 类似的函数列表: _CRTIMP int    __cdecl atoi(const char *); _CRTIMP double __cdecl atof(const char *); _CRTIMP long   __cdecl atol(const char *); _CRTIMP long double __cdecl _atold(const char *); _CRTIMP __int64 __cdecl _atoi64(const char *); _CRTIMP double __cdecl strtod(const char *, char **);// _CRTIMP long   __cdecl strtol(const char *, char **, int);// _CRTIMP long double __cdecl _strtold(const char *, char **); _CRTIMP unsigned long __cdecl strtoul(const char *, char **, int); _CRTIMP double __cdecl wcstod(const wchar_t *, wchar_t **);//长字符串类型转换为数学类型 _CRTIMP long   __cdecl wcstol(const wchar_t *, wchar_t **, int); _CRTIMP unsigned long __cdecl wcstoul(const wchar_t *, wchar_t **, int); _CRTIMP int __cdecl _wtoi(const wchar_t *); _CRTIMP long __cdecl _wtol(const wchar_t *); _CRTIMP __int64   __cdecl _wtoi64(const wchar_t *); 还有很多,请自行研究 22CString及string,char *与其他数据类型的转换和操作 1CString,string,char*的综合比较这部分CSDN上的作者joise的文章 CString,string,char*的综合比较写的很详细,请大家在仔细阅读他的文章. 地址: http://blog.csdn.net/joise/ 或参考附录: (2)转换: ●数学类型与CString相互转化 数学类型转化为CString 可用Format函数,举例: CString s; int i 64; s.Format(%d, i) CString转换为数学类型:举例CString strValue(1.234); double dblValue; dblValue atof((LPCTSTR)strValue); ●CString与char*相互转换举例 CString strValue(“Hello”); char *szValue; szValuestrValue.GetBuffer(szValue); 也可用(LPSTR)(LPCTSTR)对CString//  进行强制转换.   szValue(LPSTR)(LPCTSTR)strValue; 反过来可直接赋值: char *szCharNULL; CString strValue; szCharnew char[10]; memset(szChar,0,10); strcpy(szChar,”Hello”); strValueszChar; ●CString 与 BSTR 型转换 CString 型转化成 BSTR 型 当我们使用 ActiveX 控件编程时经常需要用到将某个值表示成 BSTR 类型.BSTR 是一种记数字符串Intel平台上的宽字符串Unicode并且可以包含嵌入的 NULL 字符。 可以调用 CString 对象的 AllocSysString 方法将 CString 转化成 BSTR CString str; str .....; // whatever BSTR bStr str.AllocSysString(); BSTR型转换为CString 如果你在 UNICODE 模式下编译代码你可以简单地写成 CString convert(BSTR bStr) { if(bStr NULL) return CString(_T()); CString s(bStr); // in UNICODE mode return s; } 如果是 ANSI 模式 CString convert(BSTR b) { CString s; if(b NULL) return s; // empty for NULL BSTR #ifdef UNICODE s b; #else LPSTR p s.GetBuffer(SysStringLen(b) 1); ::WideCharToMultiByte(CP_ACP,            // ANSI Code Page 0,                 // no flags b,                 // source widechar string -1,                // assume NUL-terminated p,                 // target buffer SysStringLen(b)1, // target buffer length NULL,              // use system default char NULL);             // dont care if default used s.ReleaseBuffer(); #endif return s; } ●VARIANT 型转化成 CString 型 VARIANT 类型经常用来给 COM 对象传递参数或者接收从 COM 对象返回的值。你也能自己编写返回 VARIANT 类型的方法函数返回什么类型 依赖可能并且常常方法的输入参数比如在自动化操作中依赖与你调用哪个方法。IDispatch::Invoke 可能返回通过其一个参数一个 包含有BYTE、WORD、float、double、date、BSTR 等等 VARIANT 类型的结果详见 MSDN 上的 VARIANT 结构的定义。在下面的例子中假设 类型是一个BSTR的变体也就是说在串中的值是通过 bsrtVal 来引用其优点是在 ANSI 应用中有一个构造函数会把 LPCWCHAR 引用的值转换为一个 CString见 BSTR-to-CString 部分。在 Unicode 模式中将成为标准的 CString 构造函数参见对缺省::WideCharToMultiByte 转换的告诫以及你觉得是否可以接受大多数情况下你会满意的。VARIANT vaData; vaData m_com.YourMethodHere(); ASSERT(vaData.vt VT_BSTR); CString strData(vaData.bstrVal); 你还可以根据 vt 域的不同来建立更通用的转换例程。为此你可能会考虑 CString VariantToString(VARIANT * va) { CString s; switch(va-vt) { /* vt */ case VT_BSTR: return CString(vaData-bstrVal); case VT_BSTR | VT_BYREF: return CString(*vaData-pbstrVal); case VT_I4: s.Format(_T(%d), va-lVal); return s; case VT_I4 | VT_BYREF: s.Format(_T(%d), *va-plVal); case VT_R8: s.Format(_T(%f), va-dblVal); return s; ... 剩下的类型转换由读者自己完成 default: ASSERT(FALSE); // unknown VARIANT type (this ASSERT is optional) return CString(); } /* vt */ } 23 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); 24(引)VARIANT 、_variant_t 与 COleVariant VARIANT的结构可以参考头文件VC98\Include\OAIDL.H中关于结构体tagVARIANT的定义。 对于VARIANT变量的赋值首先给vt成员赋值指明数据类型再对联合结构中相同数据类型的变量赋值举个例子 VARIANT va; int a2001; va.vtVT_I4;///指明整型数据 va.lVala; ///赋值 对于不马上赋值的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 l222; ing i100; _variant_t lVal(l); lVal (long)i; COleVariant的使用与_variant_t的方法基本一样请参考如下例子 COleVariant v3 字符串, v4 (long)1999; CString str (BSTR)v3.pbstrVal; long i v4.lVal; VC.NET中字符串之间的转换   一、BSTR、LPSTR和LPWSTR    在Visual C.NET的所有编程方式中我们常常要用到这样的一些基本字符串类型如BSTR、LPSTR和LPWSTR等。之所以出现类似上述的这些数据类型是因为不同编程语言之间的数据交换以及对ANSI、Unicode和多字节字符集(MBCS)的支持。    那么什么是BSTR、LPSTR以及LPWSTR呢    BSTR(Basic STRingBasic字符串)是一个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(LTest);  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(LTest);  BSTR bstrText ::SysAllocStringLen(LTest,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(LTest);  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[] LThis 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 CA2TEX16(this is a test);  LPCTSTR tcstr CA2CT(this is a test);  wchar_t wszStr[] LThis is a test;  char* chstr CW2A(wszStr);    六、结语    几乎所有的程序都要用到字符串而Visual C.NET由于功能强大、应用广泛因而字符串之间的转换更为频繁。本文几乎涉及到目前的所有转换方法。当然对于.NET框架来说还可使用Convert和Text类进行不同数据类型以及字符编码之间的相互转换。
http://www.zqtcl.cn/news/284204/

相关文章:

  • 网站动态静态软件项目管理案例教程第四版
  • 贵州萝岗seo整站优化鲜花店网站建设的总结
  • 下载做网站的软件建网站做站在
  • 无锡高端网站建设公司WordPress臃肿主题
  • 网站建设与运营财务预算seo下拉优化
  • 重庆铜梁网站建设价格阜城网站建设价格
  • 怎样建置换平台网站公众号开发周期
  • 朝阳建设网站什么是网络设计方案网络设计的原则有哪些
  • 长春商城网站制作二级网站建设 知乎
  • 网站建设的结论沭阳县建设局网站
  • 镇江网站制作价格网络有限公司简介
  • 海淀网站建设哪家公司好wordpress非常卡
  • 门户网站的建设意义交互设计专业就业前景
  • 那里有学做网站的2345网址导航下载官网
  • 房产证查询系统官方网站购买网站域名
  • 高端企业门户网站建设服务公司深圳企业网站怎么做
  • 页游网站如何做推广平面图设计软件有哪些
  • 自建网站有哪些wordpress 评论增加字段
  • 企业网站建设的方案书pc网站 公众号数据互通
  • 东莞设计制作网站制作做的asp网站手机号码
  • 必须做网站等级保护网站软件免费下载安装
  • 广州天河 网站建设上海招标网站
  • 云南网站建设方案专业的徐州网站开发
  • 政务服务 网站 建设方案郑州网站建设公司电话多少
  • 优化网站浏览量怎么看建设网站公司专业服务
  • php做的网站预览单产品网站建设
  • 网站文件验证上海推广网站公司
  • 如何免费申请网站外贸工艺品网站建设
  • 有名的wordpress网站网站开发企业培训
  • 中国建设银行绑定网站南宁seo如何做