关于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>文件中有如下定义:
L是表示字符串资源为Unicode的。
2.64位应用程序与64位DLL和32位DLL的关系
VS 2010建立的win32应用程序即为32位应用程序,x64平台即为64位应用程序,我们可以看到32位和64位程序加载的dll不同。32位程序从SysWOW64中加载dll。而64位程序从System32中加载dll。
![](https://img-blog.csdn.net/20160808155435685?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
解决方案:动态调用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。
相关文章推荐
- 关于ajax应用中session过期问题的几个解决方案
- 关于以dll调用dll的几个小问题
- 关于ajax应用中session过期问题的几个解决方案
- 几个关于tableView的问题解决方案整合
- 关于几个小问题的解决方案
- 关于ajax应用中session过期问题的几个解决方案
- 关于VS2010 rcxdti.dll is unable to load rcxdtiui.dll加载失败问题的解决方案
- 关于Oracle的几个问题及解决方案
- 几个关于Android Studio的问题及解决方案
- 关于c#调用c++ dll 的一些问题和解决方案
- 关于vs2012解决方案中项目DLL文件引用问题
- 关于ajax应用中session过期问题的几个解决方案
- 关于cnComm串口类库的问题解决方案,就是很多人说的只读几个字节的问题
- Java 关于中文乱码问题的解决方案与经验 (1)
- 关于DLL的若干问题(转贴)
- 关于指针和内存的几个问题
- Java 关于中文乱码问题的解决方案与经验【转载】
- 关于数据库被锁定的问题及其解决方案
- 关于指针和内存的几个问题
- 一些关于中文乱码问题的一些解决方案