zoukankan      html  css  js  c++  java
  • error C2664: “LoadLibraryW”: 不能将参数 1 从“const char *”转换为“LPCWSTR”

    在使用VS2010编写运行时动态链接dll文件时出现的一个问题,问题解决得益于此文章:

    http://blog.sina.com.cn/s/blog_6a2236590100xbgl.html

    通过调用这个函数:
    LoadLibrary出现的该问题。
    原因 :工程只支持UNICODE字符
    解决方法:
    1、在解决方案资源管理器中的工程上右键属性->配置属性-->常规--->字符集---->使用多字节符字符集

    2、也就是宽字符,所以下面这行代码,应该编译有错误
    hinst=LoadLibrary("InTheHand.Net.Personal.dll");
    也就是:
    cannot convert parameter 1 from 'char [27]' to 'const unsigned short *'
    改为:
    hinst=LoadLibrary(L"InTheHand.Net.Personal.dll");
    或者
    hinst=LoadLibrary(_T("InTheHand.Net.Personal.dll"));

    ================================================================

    关于LPCWSTR的类型:

    LPCWSTR
    L 后面的P是一个长的指针(以前16位windows时有短的,现在都是长的)
    P 这是一个指针
    C 指向的是const型
    W 指向的是宽字符(unicode)
    STR 这是一个字符串
    windows编程中一般还是用LPCTSTR比较多,这是一个宏,编译器跟据_UNICODE参数,决定将他变成LPCSTR(ansi版)或者LPCWSTR(unicode版)

    如果遇到参数错误(cannot convert parameter * from 'const char [**]' to 'LPCWSTR'),可以考虑察看声明,如果有ASNI方式的只要在函数后面加个A就可以了,或者在定义参数时把char*改为WCHAR*。
    如果是混合使用的,那可以考虑转化,方法很多,比如使用TEXT()对字符串常量进行转化。
    在VS2005以后的版本中默认是使用Unicode的,所以会出现很多以前版本没有的编译错误(实参与形参类型不匹配)。

  • 相关阅读:
    eclipse- DDMS截图功能使用
    宏-新项目物理按键不能用
    宏-宏的添加跟代码中的使用
    SQlite-数据库的访问实例(转)
    git 工具的使用总结(6)-提交合并处理
    git 工具的使用总结(5)-查看历史记录
    git -处理分支合并
    Linux查询网址
    SQLite常用网址
    Java查询网址
  • 原文地址:https://www.cnblogs.com/holyprince/p/4236586.html
Copyright © 2011-2022 走看看