正在运行的应用程序显示为:“由于找不到XYZ.DLL,应用程序无法启动。”但是它实际上运行正常吗?

问题描述 投票:-1回答:1

[我有一个问题,我遇到了在XP x64上运行x86应用程序的情况,该程序抛出了两(2)个错误:<< [由于找不到XYZ.DLL,应用程序无法启动”。我的问题是,它仍然可以正常运行!那如何运作?我知道如果缺少某些功能,您会得到该信息,而该应用程序实际上并未运行。是什么导致此消息运行正常?我认为LoadLibrary()不会发出消息吗?即使不使用该模块,它是否也来自库中的某些#pragma comment( lib, "XYZ.lib" )

TIA !!
winapi dll
1个回答
0
投票
我的问题是,它仍然可以正常运行!那如何运作?

如果DLL函数是静态链接的,并且在运行时找不到,则OS将完全无法创建和运行该进程。因此,显而易见的答案是DLL函数是动态链接的,而不是在运行时通过对LoadLibrary()GetProcAddress()的调用来链接的。

我知道是否缺少某些功能,但您得到的是该应用程序实际上并未运行。

如果缺少的DLL函数已链接

静态

,是。
是什么原因导致此消息运行正常?我认为LoadLibrary()不会发出消息?

实际上可以。使用SetErrorMode()避免这种情况。 SetErrorMode()文档中对此进行了详细说明:

要启用或禁用DLL加载期间加载程序显示的错误消息,请使用SetErrorMode函数。

请参见LoadLibrary()

即使未使用该模块,也来自库中的某些#pragma注释(lib,“ XYZ.lib”)吗?

链接到DLL的LoadLibrary()将创建到DLL的静态链接。除非使用的链接程序具有Silently catch windows error popups when calling LoadLibrary(),并且项目使用该链接器,否则在这种情况下,对lib的DLL函数的任何

static

调用都将转换为对.lib / delay-load feature的运行时调用。
© www.soinside.com 2019 - 2024. All rights reserved.