读书人

SetDllDirectory不能应用

发布时间: 2013-06-26 14:29:32 作者: rapoo

SetDllDirectory不能使用?
在VC6.0中不能使用SetDllDirectory这个API,使用老是提示没有定义,看MSDN,这个文件声明在头文件Header Winbase.h (include Windows.h)
Library Kernel32.lib
DLL Kernel32.dll
可是使用提示SetDllDirectory没有定义?打开Winbase.h这个头文件,发现并没有SetDllDirectory这个声明,到底SetDllDirectory声明在哪个文件,可是用VC2012只要包含<windows.h>头文件即可使用?
VC6.0中发现包含<windows.h>也不能使用?真的有点莫名其妙?
[解决办法]
Client
Requires Windows Vista or Windows XP SP1.

Server
Requires Windows Server 2008 or Windows Server 2003.

Header
Declared in Winbase.h; include Windows.h.

Library
Use Kernel32.lib.

DLL
Requires Kernel32.dll.

Unicode
Implemented as SetDllDirectoryW (Unicode) and SetDllDirectoryA (ANSI).


[解决办法]
这个API与系统版本有很大依赖,要是加载dll的话,用LoadLibraryEx
[解决办法]

引用:
Quote: 引用:

VC6 太老了,你应该用新的IDE

这跟VC6老不老没有关系,这个API是实现在Kernel32.dll中,跟系统有关,而我使用的是win7,应该是没有问题的


这个跟安装的SDK有关
VC6自带的SDK太久,win2000之前的了
并且只支持到win2003的SDK
编译通过和运行通过是两码事

引用:
Quote: 引用:

用他做甚啊?

主要是用它来解决隐式链接DLL必须跟可执行文件同在一个目录的问题.


按照PE加载的流程,静态加载完DLL后才进入main(入口)函数
隐式链接加载DLL后,才能执行SetDllDirectory的吧
就是说SetDllDirectory对静态隐式加载DLL不起作用
只会对动态加载有影响

读书人网 >VC/MFC

热点推荐