关于DLL的几个问题的解决方案

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

解决方案:动态调用DLL,通过LoadLibrary、GetProcAddress、FreeLibrary实现。原因 :工程只支持UNICODE字符。

  • 工程属性->配置属性-->常规--->字符集---->使用多字节符字符集
  • 也就是宽字符,所以下面这行代码,应该编译有错误
    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"));
    试试
  在LoadLibrary(L"../x64/Debug/DLLTest0")中的L与_T的解释为:_T是一个宏,作用是让你的程序支持Unicode编码。因为Windows使用两种字符集ANSI和UNICODE,前者就是通常使用的单字节方式,但这种方式处理像中文这样的双字节字符不方便,容易出现半个汉字的情况。而后者是双字节方式,方便处理双字节字符。
  在#include<tchar.h>文件中有如下定义:
   
#define _T(x) __T(x)
#define _TEXT(x) __T(x)
#define  __T(x)  L ##x
    如果你编译一个程序为ANSI方式,_T实际不起任何作用。 而如果编译一个程序为UNICODE方式,则编译器会把"Hello"字符串以UNICODE方式保存。 _T和L的区别在于,L不管你是以什么方式编译,一律以UNICODE方式保存。
  L是表示字符串资源为Unicode的。
2.64位应用程序与64位DLL和32位DLL的关系
VS 2010建立的win32应用程序即为32位应用程序,x64平台即为64位应用程序,我们可以看到32位和64位程序加载的dll不同。32位程序从SysWOW64中加载dll。而64位程序从System32中加载dll。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值