问题出现

  编译平台:VS2013     Windows

出现地方:在使用LoadLibrary( )函数动态链接DLL文件时出现的一个问题

    Eg.   在使用 UNICODE字符的工程中,

       HINSTANCE hIcmp = LoadLibrary( "ICMP.DLL" ); 

            报错:error C2664: “HMODULE LoadLibraryW(LPCWSTR)”:

       无法将参数 1 从“const char [9]”转换为“LPCWSTR”

分析原因

  当前工程只支持Unicode字符,不支持多字节,此时如果代码中出现多字节字符串, 就会报错。LoadLibrary 函数有两个版本,一个LoadLibraryW 针对Unicode版的,一个是LoadLibraryA 针对Multi-Byte(多字节)版的,它们通过不同的宏定义区分开,根据定义的宏会使用不同的函数版本。当使用UNICODE字符,就等于预设了_UNICODE、UNICODE宏,所以编译时就会使用LoadLibraryW。

注:Unicode字符和宽字符可以看作等同

解决方法

1,网上贴了很多,什么修改项目属性->配置属性-->常规--->字符集---->使用多字节符字符集。这种方法对于一些小工程可能适用,但是对于一些大的项目,特别是多人协作完成的项目来说,改变了字符集,其他工程也会报错。 ——不建议采取

2,在需要变为宽字节的字符串前边,加上 L 或者 _T( ) ;

  Eg.      HINSTANCE hIcmp = LoadLibrary( L"ICMP.DLL" );

  或者    HINSTANCE hIcmp = LoadLibrary( _T( "ICMP.DLL" ) );

  注: _T( )还需要加上头文件 < tchar.h >

3,  如果想在使用UNICODE字符的工程中使用多字节字符,也可以通过宏自定义设置

理解 L 和 _T( )

  查看tchar.h头文件的定义,可以发现_TEXT()和_T()功能是一样的,而且都是一个预定义的宏。

1 #define _T(x)       __T(x)
2 #define _TEXT(x) __T(x)

  我们再看看__T(x)的定义,发现它有两个:

1 #ifdef  _UNICODE
2 // ... 省略其它代码
3 #define __T(x) L ## x
4 // ... 省略其它代码
5 #else /* ndef _UNICODE */
6 // ... 省略其它代码
7 #define __T(x) x
8 // ... 省略其它代码
9 #endif /* _UNICODE */

  可以看出,_T( ) 是一个适配的宏,当工程采用Unicode字符时 _T()就是 L,会将多字节的字符串转化为Unicode字符,而工程采用多字节字符集时,就会当作一般的字符串处理,不做转换。

参考链接:https://www.cnblogs.com/codingmengmeng/p/6707909.html

  

C++ Error C2664:无法将参数 1 从“const char [9]”转换为“LPCWSTR”解决方案的更多相关文章

  1. 【转载】C++编译出现 error C2664: 不能将参数 2 从“const char [5]”转换为“LPCTSTR”解决办法。

    编译程序的时候出现这样的错误,原因是在新建MFC项目的时候,设置字符集Unicode的属性. 解决方法一: 在VC2010的解决方案管理器窗口内,右击你的项目“项目”,然后选“属性”(最后一项),再点 ...

  2. VS2010 error C2664: “CWnd::MessageBoxW”: 不能将参数 1 从“const char [3]”转换为“LPCTSTR”

    VS2010 (VC2010)建立工程时默认的字符集是Unicode,所以在代码中使用MessageBox时需要输入Unicode,用TEXT()这个宏输入参数,否则会报错:   代码:Message ...

  3. error: C2664: “zajiao::zajiao(const zajiao &)”: 无法将参数 1 从“const char [12]”转换为“char *”

    原本打算在QT用一个字符串"ABCDEF12345"作为类zajiao的构造函数的参数,用来创建类zajiao的对象zajiao1. zajiao zajiao1("AB ...

  4. error C2664: “CWnd::MessageBoxW”: 不能将参数 1 从“const char [17]”转换为“LPCTSTR”

    vs2008提示 error C2664: “CWnd::MessageBoxW”: 不能将参数 1 从“const char [17]”转换为“LPCTSTR” 在外面用vs2005编写mfc程序的 ...

  5. error C2664: “ATL::CStringT<BaseType,StringTraits>::Remove”: 不能将参数 1 从“const char [2]”转换为“char”

    转自VC错误:http://www.vcerror.com/?p=1395 问题描述: 代码: CString str("asdfafda"); str.Remove(" ...

  6. 不能将参数1从“const char []”转换为“LPCTSTR

    今天在使用vs2008+MFC时候,使用editControl的replacesel(“”)发生报错.如下::不能将参数1从“const char []”转换为“LPCTSTR” 其解决方案就是, 在 ...

  7. error C2664: “LoadLibraryW”: 不能将参数 1 从“const char *”转换为“LPCWSTR”

    在使用VS2010编写运行时动态链接dll文件时出现的一个问题,问题解决得益于此文章: http://blog.sina.com.cn/s/blog_6a2236590100xbgl.html 通过调 ...

  8. error C2664: “UINT GetDriveTypeW(LPCWSTR)”: 无法将参数 1 从“char [5]”转换为“LPCWSTR”

    解决方法:右击项目选择属性--->配置属性--->常规,将字符集改为“使用多字节字符符集”,应用确定即可. 来自为知笔记(Wiz)

  9. error C2664

    error C2664: “int CWnd::MessageBoxW(LPCTSTR,LPCTSTR,UINT)”: 无法将参数 1 从“const char [19]”转换为“LPCTSTR” n ...

随机推荐

  1. string转可空类型

    string类型转可空类型 string.IsNullOrEmpty(str) ? (int?)null : int.Parse(str) 此处要注意将null转为可空的类型才可以,不然会报错

  2. Django最简单的从请求过程

    1,url匹配,匹配路由,由理由分发器(urls.py)查找用户请求的url对应关系 1,找到业务函数就调用(views.py中的方法)   2,找不到就报404错误,     3,将数据返回给浏览器 ...

  3. java编译带中文是显示乱码的错误

    FirstJava.java:3: 错误: 编码GBK的不可映射字符 System.out.println("娆㈣繋瀛︿範Java绋嬪簭锛?")锛? ^FirstJava.java ...

  4. 利用百度编辑器和IIS限制文件上传的大小

    1.百度编辑器的大小限制 针对不同的文件类型限制大小 例如图片是imageMaxSize ,依次类推 /* 前后端通信相关的配置,注释只允许使用多行方式 */ {     /* 上传图片配置项 */ ...

  5. js事件不能触发

    在span标签添加了个onclick事件,捣腾了半天触发不了,设置z-index:1000也没用. 最后发现是元素没设置宽度width导致的,压根儿没往这方面想. 因为添加onclick的span标签 ...

  6. Python Selenium系列学习

    以下记录刚接触Python Selenium操作Web UI的学习问题: 1.python selenium三种等待方式: ①强制等待:time.sleep(value):设置等待最简单的方法就是强制 ...

  7. 47 【golang】mysql操作

    新做了个demo,可以简单了解下mysql的操作:https://github.com/helww/mylab/tree/master/go/mysql

  8. js-当前时间转换

    new Date().toLocaleString() 数组转换过后

  9. Python基础-python流程控制之顺序结构和分支结构(五)

    流程控制 流程:计算机执行代码的顺序,就是流程 流程控制:对计算机代码执行顺序的控制,就是流程控制 流程分类:顺序结构.选择结构(分支结构).循环结构 顺序结构 一种代码自上而下执行的结构,是pyth ...

  10. itchat 报错 OSError: [WinError -2147221003] 找不到应用程序: 'QR.png'

    OSError: [WinError -2147221003] 找不到应用程序: 'QR.png'   原因: 缺少在windows 下相关处理方法 解决方法:找到你运行环境C:\Python36\L ...