两个函数的主要区别是LoadLibraryEx多了个参数dwFlags,可以设定一些动态加载DLL时的选项。
一般来说,LoadLibraryEx加载DLL时并没有调用DLL,也就是不会执行DllMain,这样以来即使DLL本身存在错误也会映射成功的。
而LoadLibrary加载时不旦旦映射,还会去调用执行DllMain。
如果确认一个DLL本身不存在问题,但用LoadLibrary加载失败用LoadLibraryEx加载成功,此时一要看DllMain是否作出了某些限制,二要看DLL本身是否链接了其他DLL。
#include #include #include //假如CreateDll.dll这个dll中有一个函数Add(int a, int b);//定义一个函数指针typedef int (*func_Add)(int a, int b);int main(int argc, char *argv[]) {int sum = 0;HMODULE h = NULL;func_Add func_Add_from_dll = NULL;//注意dll的路径,视自己的情况而定h = LoadLibrary("..\\CreateDll\\CreateDll.dll");if(NULL == h){printf("LoadLibrary failed!\n");return 0;}func_Add_from_dll = (func_Add)GetProcAddress(h, "Add");if(NULL == func_Add_from_dll){printf("GetProcAddress failed!\n");return 0;}sum = (*func_Add_from_dll)(1, 2);printf("%d\n", sum);getchar();return 0;}
两个函数的主要区别是 LoadLibraryEx 多了个参数 dwFlags,可以设定一些动态加载 DLL 时的选项。
一般来说,LoadLibraryEx 加载 DLL 时并没有调用 DLL,也就是不会执行 DllMain,这样以来即使 DLL 本身存在错误也会映射成功的。而 LoadLibrary 加载时不旦旦映射,还会去调用执行 DllMain。
如果确认一个 DLL 本身不存在问题,但用 LoadLibrary 加载失败用 LoadLibraryEx 加载成功,此时一要看 DllMain 是否作出了某些限制,二要看 DLL 本身是否链接了其他 DLL。
出现此问题的原因为:设置问题造成的。解决的方法和详细的操作步骤如下:1、首先,打开计算机的“控制面板”选项,如下图所示,然后进入下一步。2、其次,完成上述步骤后,打开“硬件和声音”选项,如下图所示,然后进入下一步。3、接着,完成上述步骤后,在“设备和打印机”选项中,打开“设备管理器”选项,如下图所示,然后进入下一步。4、然后,完成上述步骤后,在“设备管理器”选项中找到“图像设备”选项,然后单击以打开以查看“Integrated Camera”这一项,如下图所示,然后进入下一步。5、随后,完成上述步骤后,在“Integrated Camera”属性中打开“更新驱动程序”选项,如下图所示,然后进入下一步。6、最后,完成上述步骤后,自动搜索在线软件并安装完成,如下图所示。这样,问题就解决了。
出现“LoadLibrary failed with error 1114: 动态链接库(DLL)初始化例程失败”问题是因为电源的设置导致显卡某些功能被禁用了。解决该问题的具体步骤如下:1、按Win+R组合键,输入control,点击“确定”按钮,打开控制面板。2、在控制面板界面中,点击“硬件和声音”按钮。3、再点击“电源选项”按钮。4、按照需要,修改“平衡”及“高性能”等计划的属性,分别点击“更改计划设置”按钮。5、再点击“更改高级电源设置”按钮。6、在电源选项窗口中,找到“可切换动态显卡-全局设置-最大化性能”选项,修改“使用电池”和“接通电源”选项的对应项为“最大化性能”。至此,电源属性设置完毕。这样就解决了“LoadLibrary failed with error 1114: 动态链接库(DLL)初始化例程失败”的问题。
别听楼上瞎BB,做什么系统?做系统用你教啊!
分析:
根据你的情况,可能是删除某些软件的残留未清理干净或者某些已经被删除的间谍软件或者流氓软件。因为某些原因……很大一部分原因是间谍软件或者流氓软件被杀毒软件删除,但是它相关的注册信息还在,导致计算机开机的时候还在加载这个文件。但是却又找不到,所以才出现报错的情况。
解决方法:
点确定看看你的系统有没有什么不正常,如果能正常使用。(应该没什么不正常的)
开始——运行——输入msconfig,删除这个config.dll文件的启动项。
或者 开始——运行——输入regedit,在“HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run\”中,右边窗口找到残留的程序名删除。
方法:首先,在运行内输入msconfig 然后点击"有选择的启动",把"加载系统服务"的勾划上,剩下的三个全部去掉。然后点击"服务"。点击"隐藏所有 microsoft 服务",然后把所有列表内的勾去掉。点确定后重新启动电脑。大部分问题都可以得到解决。windows7系统中“找不到指定的模块”错误原因:可能是被杀毒软件清除掉了,但在注册表中还是有残留信息,主要在启动项中,由于文件不存在了所以一开机就报错。
同学你好:你这问题还真是棘手。中文网上竟然查不到。原因是:你这个游戏用的是openGL这种3D编程语言写的。游戏中用loadlibrary的API加载一个模块,但是模块没有找到。这个问题只出现在win7,vista+ATI显卡上。要么等游戏新版本,解决这个问题(不知要等多久),要么装个xp,要么网上有个方法(不知道可不可以)(蹩脚的用中文翻译一下吧):
*************************************************************************
为了使用openGL,复制
%WINDIR%\system32\opengl32.dll
到
%WINDIR%\system32\.dll
是的。。。“.dll”是没有名字的。
操作如下:开始-》输入cmd->右键-》管理员运行-》 (原文不是这个意思,但这个是开启管理员权限的方法)
输入
cd %WINDIR%\system32
copy opengl32.dll .dll
如果UAC(用户账户控制)仍在起作用,你可能要使用管理员用户来运行命令。 by logicworld
**************************************************************************
Hi,
in order to use openGL, copy :
%WINDIR%\system32\opengl32.dll
- to :
%WINDIR%\system32\.dll
yes... ".dll" without name. Will work with the following command:
start -> execute (or shortcut WindowsKey + R) : cmd [ok]
cd %WINDIR%\system32
copy opengl32.dll .dll
If UAC's still active you may have to run command prompt as administrator.
source : http://www.tomshardware.com/forum/284973-33-catalyst-breaks-opengl-games
I tried it successfully for Quake III & Adobe Photoshop CS5.
This is relevant *only* if you're using an ATI videocard *and* you're under Vista or 7.
出现“loadlibrary failed with error 126"通用的解决方法:
1、搜索C:Windows\System32\DriverStore\FileRepository目录下,里面有N个目录,用搜索方法找到”atioglxx.dll“和“atio6axx.dll“;然后拷贝到某个地方,
2、注意将其中的atio6axx.dll必须重命名为atiogl64.dll
3、然后将改好后的这两个dll文件拷贝到C:Windows\System32这个位置,原来有文件的就替换。