精华内容
下载资源
问答
  • 最近用VS2010建立的C++项目在char*类型数据转换到LPCWSTR的时候,默认直接转换会提示报错。用强制转换的方式会导致乱码的出现。在网上查找了资料之后知道,“从Visual C 2005开始,编译器不再进行从char*到LPCWSTR的...
    最近用VS2010建立的C++项目在char*类型数据转换到LPCWSTR的时候,默认直接转换会提示报错。用强制转换的方式会导致乱码的出现。在网上查找了资料之后知道,“从Visual C 2005开始,编译器不再进行从char*到LPCWSTR的隐式转换了,用VC 6.0编译就没问题了,或者用提供的宏TEXT("字符串")来使用 MessageBox一类的API函数。“
    
    所以用VS2010进行编译的时候最好用宏TEXT("字符串")的方法来进行转换。例:
        //定义信息字符串
        LPCWSTR  lpszCreate=TEXT("收到WM_CREATE消息,创建窗口");
        LPCWSTR  lpszDestroy=TEXT("收到WM_DESTRORY消息,窗口关闭");
        LPCWSTR  lpszCaption=TEXT("消息");
        LPCWSTR  lpszLBT=TEXT("鼠标左键按下,收到消息");
        LPCWSTR  lpszRBT=TEXT("鼠标右键按下,收到消息");
        LPCWSTR  lpszExit=TEXT("你确定要退出吗");
    而不是:
        LPCWSTR  lpszCreate="收到WM_CREATE消息,创建窗口";
    也不是:
       LPCWSTR  lpszCreate=(LPCWSTR)"收到WM_CREATE消息,创建窗口";

    展开全文
  • 今天在做 COS脚本解释器的时候,遇到了这个问题 先了解一下 LPCTCHAR 这个东东 LPCTSTR用来表示你的字符是否使用UNICODE, 如果你的程序定义了UNICODE或者其他相关的宏... 那么什么叫UNICODE(统一码)??? ...

        今天在做 COS脚本解释器的时候,遇到了这个问题

         先了解一下 LPCTCHAR 这个东东

         LPCTSTR用来表示你的字符是否使用UNICODE, 如果你的程序定义了UNICODE或者其他相关的宏,那么这个字符或者字符串将被作为UNICODE字符串,否则就是标准的ANSI字符串。

         

           那么什么叫UNICODE(统一码)???

      背景知识:    计算机发明后,为了在计算机中表示字符,人们制定了一种编码,叫ASCII码。ASCII码由一个字节中的7位(bit)表示,范围是0x00 - 0x7F 共128个字符。后来他们突然发现,如果需要按照表格方式打印这些字符的时候,缺少了“制表符”。于是又扩展了ASCII的定义,使用一个字节的全部8位(bit)来表示字符了,这就叫扩展ASCII码。范围是0x00 - 0xFF 共256个字符。中国人利用连续2扩展ASCII码的扩展区域(0xA0以后)来表示一个汉字,该方法的标准叫GB-2312。后来,日文、韩文、阿拉伯文、台湾繁体(BIG-5)......都使用类似的方法扩展了本地字符集的定义,现在统一称为 MBCS 字符集(多字节字符集)。这个方法是有缺陷的,因为各个国家地区定义的字符集有交集,因此使用GB-2312的软件,就不能在BIG-5的环境下运行(显示乱码),反之亦然。

         为了把全世界人民所有的所有的文字符号都统一进行编码,于是制定了UNICODE标准字符集。UNICODE 使用2个字节表示一个字符(unsigned shor int、WCHAR、_wchar_t、OLECHAR)。这下终于好啦,全世界任何一个地区的软件,可以不用修改地就能在另一个地区运行了。虽然我用 IE 浏览日本网站,显示出我不认识的日文文字,但至少不会是乱码了。UNICODE 的范围是 0x0000 - 0xFFFF 共6万多个字符,其中光汉字就占用了4万多个

            

        1、LPCTSTR是什么?

       LPCTSTR就是一个32-bit指针指向一个常字符串,每字符可能占1字节或2字节,取决于Unicode是否定义

       LPCTSTR是一个windows API数据类型。根据windows API数据类型的命名规律:

    1)L——long 指针,是为了兼容Window3.1等16位扣件系统遗留下来的,
    在Win32中以及其他的32的扣件系统中,long 指针和near 指针及far 修饰符都是为了兼容的作用,而没有实际意义。
    2)P表示该变量是一个指针,C表示是常量(const),STR表示的是字符串。因此LPCSTR是一个const char*类型。
    这是一个windows(ANSI)字符串常量,它是多字节编码的。
    3)LPCWSTR:而W表示的是宽字符,因此LPCWSTR表示的也是字符串常量,不过是Unicode编码的。

        

       2、问题的解决

         1、用THCAR代替char

      2、字符串加_T(""),如_T("你好")
    3、用_tcscpy等代替strcpy等

       前俩种方法我都用了

       

       其实我还是不太明白。为什么会出现这个问题呢??????

    转载于:https://www.cnblogs.com/wyuzl/p/6215527.html

    展开全文
  • char类型的实参与LPCWSTR类型的形参类型不兼容 char char是8位字符类型,最多只能包含256种字符,许多外文字符集所含的字符数目超过256个,char型无法表示。 wchar_t Wide character 。wchar_t数据类型一般为16...

    char类型的实参与LPCWSTR类型的形参类型不兼容

    char

    char是8位字符类型,最多只能包含256种字符,许多外文字符集所含的字符数目超过256个,char型无法表示。

    wchar_t

    Wide character 。wchar_t数据类型一般为16位或32位,但不同的C或C++库有不同的规定,如GNU Libc规定wchar_t为32位,总之,wchar_t所能表示的字符数远超char型。unicode编码的字符一般以wchar_t类型存储

    wchar_t wt[] = L"中国伟大复兴梦";   
    wcout << wt << endl;    
    
    //将char*转换成wchar_t
    
    wchar_t appName[5]=TEXT("test"); //可以用TEXT()方法将char转换成wchar_t
    L"test" //也可以在字符串前面加上L
    
    //string.h
    //在字符串操作时在函数名前加 ‘l’
    lstrcpy();
    lsrtcmp();

     

    LPCWSTR

    LPCWSTR是一个指向unicode编码字符串的32位指针,所指向字符串是wchar型,而不是char型。

    该类型是如下声明的:

    typedef const wchar_t* LPCWSTR;

    解决方案:

    • 把工程设置里去掉UNICODE宏定义(VS)

             项目->XXX属性->配置属性->常规->字符集 , 由使用Unicode字符集 改为 使用多字节字符集

    • 使用TCHAR。

             #define char TCHAR

    • 如果还有错误,在出错的字符串前面加大写

             L"this  is  simba.\n"

    • 如果还有错误,在出错的字符串处理函数前面加小写‘l’

            lstrcat (llala,L"abcd") ;

    展开全文
  • 在进行windows系统的文件目录遍历编程时,遇到FindFirstFile这个函数老是出现 “char*”类型的实参与“LPCWSTR类型的形参不兼容 的错误提示。代码如下: #include &lt;iostream&gt; #include &lt;...

    在进行windows系统的文件目录遍历编程时,遇到FindFirstFile这个函数老是出现 “char*”类型的实参与“LPCWSTR”类型的形参不兼容 的错误提示。代码如下:

    #include <iostream>
    #include <vector>
    #include <windows.h>
    using namespace std;
    
    int main()
    {
    	HANDLE h;  
    	char* lpFileName= ".\\data\\*.*";  
    	WIN32_FIND_DATA f;  
    	h=FindFirstFile(lpFileName, &f);  //读取第一个文件
    	if (h == INVALID_HANDLE_VALUE)  
    	{  
    		cout<< "搜索失败" <<endl;  
    		system("pause");  
    		exit(0);  
    	}  
    	cout << f.cFileName << endl;
    	system("pause");  
    	return 0;
    }

    该程序的功能是打开.\data文件夹,并且读取该目录下的第一个文件名“.”,并显示。

    解决办法

    方法一、把工程设置里去掉UNICODE宏定义

          项目->XXX属性->配置属性->常规->字符集 , 由使用Unicode字符集 改为 使用多字节字符集

    方法二、在程序的开头加上 #undef UNICODE

    展开全文
  • LPCTSTR LPCWSTR LPCSTR三者的含义和区别

    千次阅读 2017-05-04 20:38:44
    #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
  • LPCSTR类型

    千次阅读 2020-03-25 11:43:39
    1. 什么是LPCSTR LPCSTR是Win32和VC++所使用的一种字符串数据类型。 LPCSTR被定义成是一个指向以’\0’结尾的常量字符的指针。 L表示long P表示这是一个指针 C表示是常量const STR表示这个变量是一个字符串 2. ...
  • 类型的实参与 "LPCWSTR" 类型的形参不兼容 (2)IntelliSense: 不能将 "const char *" 类型的值分配到 "LPCWSTR" 类型的实体 #include &lt;windows.h&gt; #include &...
  • c++ 中的 LPCTSTR类型 

    2020-10-20 12:58:52
    LPCTSTR类型  L表示long指针 这是为了兼容Windows 3.1等16位操作系统遗留下来的,在win32中以及其他的32为操作系统中, long指针和near指针及far修饰符都是为了兼容的作用。没有实际意义。  P表示这是一个指针;...
  • 解决:包含tchar.h,字符串常量使用_T(“字符串”)形式
  • 引用#include <tchar.h> _T() 将字符串转成tchar #include "stdafx.h" #include<windows.h>... if(hwnd=::FindWindow(_T("ConsoleWindowClass"),NULL)) //找到控制台句柄 ... //隐藏控制台窗口...
  • 解决方法一:通常手动输入的字符串都是const char*(即LPCSTR)类型的,因此只需将该句中的MessageBox改为MessageBoxA即可。解决方法二:参数使用“_T”宏:MessageBox(NULL,_T("Open image failed!"),_T("error"),...
  • string类型LPCWSTR

    2020-08-11 09:26:30
    LPCWSTR 是一个指向宽字符串的常量字符指针,是一个指向unicode编码字符串的32位指针,所指向字符串是wchar型,而不是char型。...string类型LPCWSTR LPCWSTR stringToLPCWSTR(std::string orig) { wcha...
  • 输入LPCWSTR类型字符串

    2019-10-07 05:50:50
    LPCWSTR tmp = L"xxx"; char*转到LPCWSTR LPCSTR(charTmp) 转载于:https://www.cnblogs.com/hont/p/4188599.html
  • SetConsoleTitle设置窗口标题的时候 报错 const char *类型的实参与LPCWSTR类型的形参不兼容解决 解决方法:项目——>属性——>配置属性——>高级——>字符集 设置成未设置 ...
  • 出现这个问题的原因是由于字符编码问题引起的,详细理论就不赘述了,网上都有。这里主要说解决方法: 文章目录1.直接输入文本(1):改变项目编码格式(2):改变代码2.使用MessageBox3.... 1.直接输入文本 ...
  • E0513 不能将 "LPCSTR" 类型的值分配到 "LPCWSTR" 类型的实体 E0167 "LPCSTR" 类型的实参与 "LPCWSTR" 类型的形参不兼容 E0167 "char *" 类型的实参与 "LPCWSTR" 类型的形参不兼容 E0167 "const char *" 类.....
  • 出现一下问题: 把这个字符集修改一下就好了:
  • 动态调用DLL通过LoadLibraryGetProcAddressFreeLibrary实现。原因 :工程只支持UNICODE字符
  • const char *"类型的实参与"LPCWSTR"类型的形参不兼容错 问题分析 LPCWSTR在低版本中可以直接用字符数组传参,但是高版本vusal studio里面默认Unicode编码,导致失败 解决办法 通过更改项目属性: 项目–>.xxx属性...
  • 碰到这类错误,实在让人发愁。建议:  使用TCHAR。  使用CString。
  • 解决: 1.例如字符串"screen",改为_T(“screen”) 2.添加头文件#include <tchar.h> #include <tchar.h> ... ... int main(){ ... //在出错的地方用_T("screen")代替"screen" ... ......
  • VS2019中出现 “char*”类型的实参与“LPCWSTR类型的形参不兼容 的错误提示。 解决办法 在工程设置里去掉UNICODE宏定义: 项目->XXX属性->配置属性->高级->字符集,由使用Unicode字符集改为使用多...
  • visual studio 2017编程时,报错: const char *类型的实参与LPCWSTR类型的形参不兼容。 解决方法:项目——项目属性——常规——项目默认值——字符集 把字符集设为未设置,确定,没有再报错了。 ...
  • https://blog.csdn.net/qq_28584889/article/details/87981124
  • 步骤: 视图-属性管理器-属性-配置属性-常规-将使用Unicode字符集变为使用多字节字符集
  • 错误如下: 解决方案: 将配置属性->常规->字符集设置为:使用多字节字符集(如下图所示)
  • visual studio 2017编程时,报错: const char *类型的实参与LPCWSTR类型的形参不兼容。 解决方法:项目——项目属性——常规——项目默认值——字符集 把字符集设为未设置,确定,没有再报错了。 转载于:...
  • 【原文出处】: https://blog.csdn.net/zhouxuguang236/article/details/8761497 ... 一、char* 转 LPCWSTR 1、通过MultiByteToWideChar函数转换 MultiByteToWideChar函数是将多字节转换...
  • 在我们使用VS编写C++程序 include&lt;windows.h&gt; SetConsoleTitle()方法 设置窗口标题的时候报上面的错误, 解决方法: ...gt;配置属性-&gt;常规-&...字符集 把字符集设置为 “使用多字节字符集” ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,265
精华内容 3,306
关键字:

lpcwstr是什么类型