您的位置:首页 > 其它

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

2016-08-08 15:16 435 查看
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。



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  windows DLL