Winapi 正在运行的应用程序会显示:“运行”;由于找不到XYZ.DLL,应用程序无法启动;但它实际上运行良好?

Winapi 正在运行的应用程序会显示:“运行”;由于找不到XYZ.DLL,应用程序无法启动;但它实际上运行良好?,winapi,dll,Winapi,Dll,我有一个问题,我在XP x64上运行一个x86应用程序时遇到了两(2)个“应用程序无法启动,因为找不到XYZ.DLL”。我的问题是,它仍然运行良好!那这是怎么回事?我知道如果某个功能丢失了,你会得到它,而应用程序实际上不会运行。是什么原因导致此消息运行良好?我不认为LoadLibrary()会显示消息?它是否来自库中的某个#pragma注释(lib,“XYZ.lib”),即使未使用该模块 蒂娅 我的问题是,它仍然运行良好!那这是怎么回事 如果DLL函数是静态链接的,并且在运行时找不到,操作系统将

我有一个问题,我在XP x64上运行一个x86应用程序时遇到了两(2)个“应用程序无法启动,因为找不到XYZ.DLL”。我的问题是,它仍然运行良好!那这是怎么回事?我知道如果某个功能丢失了,你会得到它,而应用程序实际上不会运行。是什么原因导致此消息运行良好?我不认为
LoadLibrary()
会显示消息?它是否来自库中的某个
#pragma注释(lib,“XYZ.lib”)
,即使未使用该模块

蒂娅

我的问题是,它仍然运行良好!那这是怎么回事

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

我知道如果某个功能丢失了,你会得到它,而应用程序实际上不会运行

如果缺少的DLL函数是静态链接的,则为“是”

是什么原因导致此消息运行良好?我不认为LoadLibrary()会显示消息

事实上,它可以。使用以避免这种情况。这在文件中也有详细说明:

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

它是否来自库中的某个#pragma注释(lib,“XYZ.lib”),即使该模块未使用

链接到DLL的
.lib
会创建到DLL的静态链接。除非链接器具有可用的,并且项目正在使用该功能,否则在这种情况下,编译器+链接器会将对库的引用DLL函数的任何静态调用转换为对
LoadLibrary()
/
GetProcAddress()
的运行时调用