C++ Error C2664:无法将参数 1 从“const char [9]”转换为“LPCWSTR”解决方案
问题出现
编译平台: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”解决方案的更多相关文章
- 【转载】C++编译出现 error C2664: 不能将参数 2 从“const char [5]”转换为“LPCTSTR”解决办法。
编译程序的时候出现这样的错误,原因是在新建MFC项目的时候,设置字符集Unicode的属性. 解决方法一: 在VC2010的解决方案管理器窗口内,右击你的项目“项目”,然后选“属性”(最后一项),再点 ...
- VS2010 error C2664: “CWnd::MessageBoxW”: 不能将参数 1 从“const char [3]”转换为“LPCTSTR”
VS2010 (VC2010)建立工程时默认的字符集是Unicode,所以在代码中使用MessageBox时需要输入Unicode,用TEXT()这个宏输入参数,否则会报错: 代码:Message ...
- error: C2664: “zajiao::zajiao(const zajiao &)”: 无法将参数 1 从“const char [12]”转换为“char *”
原本打算在QT用一个字符串"ABCDEF12345"作为类zajiao的构造函数的参数,用来创建类zajiao的对象zajiao1. zajiao zajiao1("AB ...
- error C2664: “CWnd::MessageBoxW”: 不能将参数 1 从“const char [17]”转换为“LPCTSTR”
vs2008提示 error C2664: “CWnd::MessageBoxW”: 不能将参数 1 从“const char [17]”转换为“LPCTSTR” 在外面用vs2005编写mfc程序的 ...
- error C2664: “ATL::CStringT<BaseType,StringTraits>::Remove”: 不能将参数 1 从“const char [2]”转换为“char”
转自VC错误:http://www.vcerror.com/?p=1395 问题描述: 代码: CString str("asdfafda"); str.Remove(" ...
- 不能将参数1从“const char []”转换为“LPCTSTR
今天在使用vs2008+MFC时候,使用editControl的replacesel(“”)发生报错.如下::不能将参数1从“const char []”转换为“LPCTSTR” 其解决方案就是, 在 ...
- error C2664: “LoadLibraryW”: 不能将参数 1 从“const char *”转换为“LPCWSTR”
在使用VS2010编写运行时动态链接dll文件时出现的一个问题,问题解决得益于此文章: http://blog.sina.com.cn/s/blog_6a2236590100xbgl.html 通过调 ...
- error C2664: “UINT GetDriveTypeW(LPCWSTR)”: 无法将参数 1 从“char [5]”转换为“LPCWSTR”
解决方法:右击项目选择属性--->配置属性--->常规,将字符集改为“使用多字节字符符集”,应用确定即可. 来自为知笔记(Wiz)
- error C2664
error C2664: “int CWnd::MessageBoxW(LPCTSTR,LPCTSTR,UINT)”: 无法将参数 1 从“const char [19]”转换为“LPCTSTR” n ...
随机推荐
- flask接收post提交的json数据并保存至数据库
定义数据模型 # 定义数据模型class User(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(d ...
- python相关注册登录方式
1.使用django自带功能实现登录/退出登录 使用django自带登录功能,前提生成用户(用户注册)使用的是django自带的user,或称models中用户表继承于django自带的user 1. ...
- OO第二单元学习总结
前言: 第二单元总共包括三次电梯调度作业.这三次作业在笔者看来是为了让学生了解什么是多线程,多线程的好处及可能存在的潜在问题,对于多线程的安全问题应该如何解决和保证结果的唯一性和正确性.那么接下来笔者 ...
- linux上安装MongoDB副本集(带keyfile安全认证以及用户权限)
搭建前准备 MongoDB版本:4.0 主要参考搭建MongoDB副本集网站:https://www.jianshu.com/p/f021f1f3c60b 安装之前最好先确定一下几点: 防火墙关闭 M ...
- JavaScript并发模型与Event Loop (转载)
并发模型可视化描述 model.svg 如上图所示,Javascript执行引擎的主线程运行的时候,产生堆(heap)和栈(stack),程序中代码依次进入栈中等待执行, 若执行时遇到异步方法,该异步 ...
- Android中竖线随内容高度变化而变化的问题和解决办法
项目中要求显示竖线,并且竖线高度不确定,竖线的高度要随着内容的变化而变化.不能使用match_parent 充满,也不能在布局中写死,此时使用 android:layout_height=" ...
- ionic3自定义android原生插件
一.创建一个android项目,编写插件功能,并测试ok,这里以一个简单的调用原生Toast.makeText为例. 1.新建android项目 2.编写插件类 package com.plugin. ...
- java之数据库相关
这篇还是在回顾知识.主要是关于java连接Sqlserver2012数据库的一些方式记录,以便以后查询. 十一之内复习完这些知识就可以新学Hibernate啦(*^▽^*) 1.普通方式 注意,在连接 ...
- 现代编译原理——第二章:语法分析之LL(K)
转自: http://www.cnblogs.com/BlackWalnut/p/4472122.html LL(K)语法分析技术是建立在预测分析的技术之上的.我们先来了解预测分析技术.考虑以下文法: ...
- 生信分析常用脚本(二)--SOAPdenovo
1.SOAPDenovo配置文件示例 软件下载安装和使用:http://soap.genomics.org.cn/soapdenovo.html asm.cfg #maximal read lengt ...