Windows 静态链接的应用程序-无效或损坏的dll

Windows 静态链接的应用程序-无效或损坏的dll,windows,visual-studio,winapi,dll,compiler-construction,Windows,Visual Studio,Winapi,Dll,Compiler Construction,我有一个使用winInet类的应用程序-#include。然后,当我阅读时,我将wininet.dll复制到我的项目目录中 生成时,我收到以下错误-wininet.dll:致命错误LNK1136:无效或损坏的文件 我的第一个问题是: -我认为静态链接函数调用和dll的做法正确吗? -如果是这样的话,为什么dll在此设置中已损坏,但在没有这些更改的情况下仍能正常工作 感谢您的帮助。多谢各位 您不应该直接链接到DLL。相反,应该针对相应的导入库(应该是Wininet.lib)进行链接。当然,DLL仍

我有一个使用winInet类的应用程序-
#include。然后,当我阅读时,我将wininet.dll复制到我的项目目录中

生成时,我收到以下错误-
wininet.dll:致命错误LNK1136:无效或损坏的文件

我的第一个问题是:
-我认为静态链接函数调用和dll的做法正确吗?
-如果是这样的话,为什么dll在此设置中已损坏,但在没有这些更改的情况下仍能正常工作


感谢您的帮助。多谢各位

您不应该直接链接到DLL。相反,应该针对相应的导入库(应该是
Wininet.lib
)进行链接。当然,DLL仍然需要在运行时被应用程序访问。链接器需要
.lib
文件来设置到DLL的正确链接

我认为静态链接函数调用和dll的做法正确吗

你所做的通常被称为动态链接(或多或少是动态的…),但它(afaik)是Windows系统API的唯一途径。”“静态”链接将把Wininet代码直接嵌入到可执行文件中,而不需要外部DLL。

“静态链接”是将代码包含在应用程序中的过程。从本质上讲,DLL是一个动态链接库,因此,没有,包括应用程序目录中的DLL不是静态链接-它仍然是动态的。将其放置在应用程序目录中的原因是,应用程序无需安装即可找到它


我不认为是DLL“损坏”-我怀疑您试图将DLL静态链接到应用程序中,这是不可能发生的。相反,您需要在要链接的其他库中包含正确的.lib文件,不管是什么,并确保您链接的lib文件不是wininet.DLL的DLL导出包。当您链接到DLL时,有一个相应的lib文件用于设置到函数的正确链接。例如,如果您使用的是USER32.DLL和KERNEL32.DLL,那么需要链接的相应LIBs将是USER32.LIB和KERNEL32.LIB

有时这并不明显,您可以通过查看MSDN来仔细检查相关函数,当您向下滚动到该页面底部时,它会告诉您要链接的库,例如,查看Win32API,当您查看页面底部时,它会告诉您要使用的库,在本例中,它是KERNEL32.LIB

您刚刚在链接器阶段引用了一个DLL,链接器无法理解该DLL,因为它已经是一个编译库,因此链接器抱怨它“损坏”

将其更改为WinInet.LIB,一切都应该正常

希望这有帮助, 顺致敬意, 汤姆