LPSTR   一个32位的指向字符串的指针    LPCSTR   一个32位的指向字符串常量的指针    LPWSTR   一个32位的指向unicode字符串的指针    LPCWSTR   个32位的指向unicode字符串常量的指针 前面的L代表LONG,P就是指针的意思,C就是constant的意思,W是wide的意思,STR就是string的意思 LPSTR = char *LPCSTR = const char *LPWSTR = wchar_t *LPCWSTR = const…
1. Unicode字符集: 它是用两个字节表示一个字符的方法.比如字符'A'在ASCII下面是一个字符,可'A'在UNICODE下面是两个字符,高字符用0填充,而且汉字'程'在ASCII下面是两个字节,而在UNICODE下仍旧是两个字节.UNICODE的用处就是定长表示世界文字,据统计,用两个字节可以编码现存的所有文字而没有二义. 2. MCBS字符集: 即多字节字符集,它是不定长表示世界文字的编码.MBCS表示英文字母时就和ASCII一样(这也是我们容易把MBCS和ASCII搞混的原因),但…
DWORD:本来被定义为unsigned long,DWORD的含义就是双字,一个字是2字节,双字就是32字节. 但是在C/C++中,经常会用到把一个指针转换成数字储存,然后再将其传唤为指针调用.那么在32位系统下,指针是32位长度的,在64位系统下,指针是64位长度的,所以微软引入了DWORD_PTR和INT_PTR等带_PTR的类型,这些类型是这么保证的:将指针转换成带_PTR的类型然后再转换回来,可以得到原始的指针,不会发生截断.在实现上,DWORD_PTR在32位程序和64位程序的定义是…
首先在编译程序时经常会遇到这种问题: 错误 1 error C2664: "CWnd::MessageBoxW": 不能将参数 1 从"const char [3]"转换为"LPCTSTR" 1.觉得很烦,一般的做法就是不管三七二十一,在字符串前面加一个'L':如调用函数FUN(LPCTSTR str)时,不能  FUN("HELLO"); 而是FUN(L"HELLO");通常这样做都比较能解决问题.2.或…
标签: 杂谈 分类: VC     char*   是指向ANSI字符数组的指针,其中每个字符占据8位(有效数据是除掉最高位的其他7位),这里保持了与传统的C,C++的兼容.        LP的含义是长指针(long   pointer).LPSTR是一个指向以‘’结尾的ANSI字符数组的指针,与char*可以互换使用,在win32中较多地使用LPSTR.而LPCSTR中增加的‘C’的含义是“CONSTANT”(常量),表明这种数据类型的实例不能被使用它的API函数改变,除此之外,它与LPST…
        类   型     MBCS  UNICODE TCHAR char char WCHAR wchar_t wchar_t LPSTR char* char* LPCSTR const char* const char* LPWSTR wchar_t* wchar_t* LPCWSTR const wchar_t* const wchar_t* LPTSTR TCHAR* TCHAR* LPCTSTR const TCHAR* const TCHAR*             相…
UNICODE:它是用两个字节表示一个字符的方法.比如字符'A'在ASCII下面是一个字符,可'A'在UNICODE下面是两个字符,高字符用0填充,而且汉字'程'在ASCII下面是两个字节,而在UNICODE下仍旧是两个字节.UNICODE的用处就是定长表示世界文字,据统计,用两个字节可以编码现存的所有文字而没有二义. MBCS,它是多字节字符集,它是不定长表示世界文字的编码.MBCS表示英文字母时就和ASCII一样(这也是我们容易把MBCS和ASCII搞混的原因),但表示其他文字时就需要用多字…
在类似于arcgis api for javascript中,经常会遇到function(e),以前一直不懂e是个什么玩意,这种写法啥意思,经过最近一段时间学习,对e有了很深了解,本文通过各种示例,由事件阶段----事件委托----事件对象逐个总结,最后对e的各种属性,应用加以实践. ***********************************************************************************************************…
原文:http://www.cnblogs.com/GT_Andy/archive/2011/01/18/1938605.html 一.定义 1.CString:动态的TCHAR数组.它是一个完全独立的类,封装了+等操作符和字符串操作方法. 2.BSTR:专有格式的字符串(需要使用系统函数来操纵).定义为:typedef OLECHAR FAR* BSTR 3.LPCTSTR:常量的TCHAR指针.定义为:typedef const char* LPCTSTR 二.要点 1.char*:指向AN…
使用C#调用windows API(从其它地方总结来的,以备查询) C#调用windows API也可以叫做C#如何直接调用非托管代码,通常有2种方法: 1.  直接调用从 DLL 导出的函数. 2.  调用 COM 对象上的接口方法 我主要讨论从dll中导出函数,基本步骤如下: 1.使用 C# 关键字 static 和 extern 声明方法. 2.将 DllImport 属性附加到该方法.DllImport 属性允许您指定包含该方法的 DLL 的名称. 3.如果需要,为方法的参数和返回值指定…
一.CString, int, string, char*之间的转换 string 转 CString CString.Format("%s", string.c_str());char 转 CString  CString.Format("%s", char*);char 转 string  string s(char *);string 转 char *  char *p = string.c_str();CString 转 string  string s(C…
 关于字符集不一的历史原因,可以参考: UNICODE与ANSI的区别 以下是网上转载的资料.我将辅以自己的实例,说明并总结关系. 一.CString, int, string, char*之间的转换(无法区分这几个类型的把这节跳过,最后回来复习) string 转 CString  CString.Format("%s", string.c_str());char 转 CString  CString.Format("%s", char*);char 转 stri…
悉Microsoft支持Unicode的方式. 它的主要目的是方便你查询相关的数据类型和函数,以及修正相应的拼写错误. I18nGuy 主页 XenCraft (Unicode 咨询公司) English My thanks to Yaker Gong for the translation to Chinese. Xie Xie! 使你的C/C++代码支持Unicode的第一步 定义宏 _UNICODE, 如果定义了宏 _MBCS 则取消它的定义(undefine). 在字符串前添加 L 标记…
Project Properties -> General-> Character set,里面显示了是不是unicode. Unicode处理String的方式不一样,一定要注意!!   使你的C/C++代码支持Unicode的第一步 定义宏 _UNICODE, 如果定义了宏 _MBCS 则取消它的定义(undefine). 在字符串前添加 L 标记或者用 _T宏修饰字符串. 使用 Wide 或者 TCHAR 版本的字符串处理函数. 确定API中的字符串长度是按字节计数还是按字符个数计数.因…
一:入门,直接从 C# 调用 DLL 导出   其实我们的议题应该叫做C#如何直接调用非托管代码,通常有2种方法: 1.  直接调用从 DLL 导出的函数. 2.  调用 COM 对象上的接口方法 我主要讨论从dll中导出函数,基本步骤如下: 1.使用 C# 关键字 static 和 extern 声明方法. 2.将 DllImport 属性附加到该方法.DllImport 属性允许您指定包含该方法的 DLL 的名称. 3.如果需要,为方法的参数和返回值指定自定义封送处理信息,这将重写 .NET…
C#如何直接调用非托管代码,通常有2种方法: 1.  直接调用从 DLL 导出的函数. 2.  调用 COM 对象上的接口方法 我主要讨论从dll中导出函数,基本步骤如下: 1.使用 C# 关键字 static 和 extern 声明方法. 2.将 DllImport 属性附加到该方法.DllImport 属性允许您指定包含该方法的DLL 的名称. 3.如果需要,为方法的参数和返回值指定自定义封送处理信息,这将重写 .NET Framework 的默认封送处理. 好,我们开始 1.首先我们查询M…
编码知识 一.Unicode与多字节(ANSI ) (1)Windows中,Unicode也称为宽字节,多字节也称为窄字节; VS中默认使用Unicode编码,在项目属性>>配置属性>>常规>>字符集中可选择Unicode字符集或者多字节字符集 (2) Unicode与多字节函数版本.字符.字符串类型的区别 Win32 API中大部分参数有字符串的函数都有两个版本 以A结尾,代表多字节版本 以W结尾,代表Unicode版本 根据版本自动选择的 如:CreateEvent…
使用C#调用windows API入门 一:入门,直接从 C# 调用 DLL 导出   其实我们的议题应该叫做C#如何直接调用非托管代码,通常有2种方法: 1.  直接调用从 DLL 导出的函数. 2.  调用 COM 对象上的接口方法 我主要讨论从dll中导出函数,基本步骤如下: 1.使用 C# 关键字 static 和 extern 声明方法. 2.将 DllImport 属性附加到该方法.DllImport 属性允许您指定包含该方法的 DLL 的名称. 3.如果需要,为方法的参数和返回值指…
这章中描述的属性被用在创建和COM程序交互的程序中. 1.1  COMImport 属性 当被放在一个类上, COMImport 属性就把这个类标记为一个外部实现的COM 类.这样的一个类声明使得可以用一个C# 名称调用一个COM 类. namespace System.Runtime.InteropServices { [AttributeUsage(AttributeTargets.Class)] public class COMImportAttribute: System.Attribu…
C#在访问Win 32 Api时需要处理C 结构与C#结构的映射,这在MSDN以及许多Blog上都可以找到参考的资料.Win 32 中有一些定义复杂的Struct,这些结构体拥有长度固定的数组或者一些特殊的结构,比如定义拥有有char Name[ULEN].GUID.HANDLE等.在Mprapi中有一个名为RAS_CONNECTION_2这样的结构体,它描述了远程连接到服务器[远程与路由访问服务]的连接信息,是一个级联的.复杂的结构体定义.其Win 32的定义如下: typedef struc…
引用 LPSTR.LPCSTR.LPTSTR.LPCTSTR.LPWSTR及LPCWSTR的意义及区别 1.ANSI(即MBCS):为多字节字符集,它是不定长表示世界文字的编码方式.ANSI表示英文字母时就和ASCII一样,但表示其他文字时就需要用多字节. 2.Unicode:用两个字节表示一个字符的编码方式.比如字符'A'在ASCII下面用一个字节表示,而在Unicode下面用两个字节表示,其中高字节用“0”填充:函数'程'在ASCII下面用两个字节表示,而在Unicode下面也是用两个字节表…
1.ANSI(即MBCS):为多字节字符集,它是不定长表示世界文字的编码方式.ANSI表示英文字母时就和ASCII一样,但表示其他文字时就需要用多字节.   2.Unicode:用两个字节表示一个字符的编码方式.比如字符'A'在ASCII下面用一个字节表示,而在Unicode下面用两个字节表示,其中高字节用“0”填充:函数'程'在ASCII下面用两个字节表示,而在Unicode下面也是用两个字节表示.Unicode的用处就是定长表示世界文字,据统计,用两个字节可以编码现存的所有文字而没有二义.…
#ifdef UNICODE#define LPCTSTR LPCWSTR#else#define LPCTSTR LPCSTR#endif      LPCTSTR A 32-bit pointer to a constant character string that is portable for Unicode and DBCS. An LPCWSTR if UNICODE is defined, an LPCSTR otherwise.LPCWSTR Pointer to a cons…
LPSTR = char* LPCSTR = const char* LPTSTR: 如果定义了UNICODE宏,那么LPTSTR = wchar_t*否则LPTSTR = char* LPCTSTR: 如果定义了UNICODE宏,那么LPCTSTR = const wchar_t*,否则LPCSTR = const char* 告诉你方法, "LP"前缀是历史遗留的,在Win32下就是 P ,代表指针的含义. "C"代表const "T"的含义…
注意,编写有 Unicode 意识的代码总是一件好事,比如: CString graycat = CString(_T("Gray")) + _T("Cat"); 这将使得你的代码可以直接移植.   1, 将参数从"const char *"转换为"LPCTSTR" 使用_T.L.TEXT等转换宏 MyFunZipCp(_T("C:\\SY.txt"),_T("C:\\SY.ZIP"),…
编译器有时候会根据编码方式来选择定义为LPCWSTR还是LPCTSTR LPSTR: 32bit指针 指向一个字符串,每个字符占1字节. 相当于 char *   LPCSTR: 32-bit指针 指向一个常字符串,每个字符占1字节. 相当于 const char *   LPTSTR: 32-bit指针 每字符可能占1字节或2字节,取决于Unicode是否定义   LPCTSTR:32-bit指针 指向一个常字符串,每字符可能占1字节或2字节,取决于Unicode是否定义   LPWSTR:…
1. LPTSTR解释 与char*等价,表示普通字符/字符串变量,指向字符/字符串的指针. LP:  长指针(long pointer). T:   win32环境中有一个_T宏,用来标识字符是否采用Unicode编码(两字节表示一个字符),若程序中定义了Unicode,该字符/字符串被作为Unicode字符串,否则就是标 准的ANSI(单字节表示一个字符)字符串. STR: 表示这个变量是一个字符串. LPTSTR 转换成 CString  (1)直接赋值 CString strText;…
一.CString转换为LPSTR 方法一: CString strFileName LPSTR lpstr - strFileName.GetBuffer(); strFileName.Releasebuffer(); 方法二: 强制转化 CString strFileName; LPSTR lpstr = (LPSTR)(LPCSTR)strFileName; 二.LPSTR转化为CString LPSTR lpstr = _T("TestStr"); CString str(lp…
1.LPCSTR是Win32和VC++所使用的一种字符串数据类型,L表示long,P表示指针,C表示常量,STR表示字符串. 2.LPCSTR转化为CString: LPCSTR  lpStr="test"; CString str(lpStr); 3.CString转化为LPCSTR: CString str("test"); LPCSTR lpStr = (LPCSTR)str; 本文出自 “交流思想 你我共赢” 博客,请务必保留此出处http://xfqxj.…
本文纯为本人记录,有网上诸多参考,请勿转发! 记录可能可能有点啰嗦,自己划重点吧!! (无论是生活还是工作,如果很困惑,千万不要消极一定要勇敢积极的面对它,不用说太多懂得人自然懂,一定要解决这个疑惑就多读书吧! 书是你最好的交流对象 ---2019-04-15) 参考: 1.c/c++ int _tmain(int argc, _TCHAR* argv[]) : https://blog.csdn.net/exceptional_czr/article/details/38786707 2.Co…