Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual c++ 如何管理加载dll';在visual c++; >Dan N,谢谢。lib的结构在生成时是受控的,对吗?可能存在两种选择:1。函数的实现可以在.lib中实现;2.函数的实现可以在与.lib同名的关联.dll中。还有其他选择吗?_Visual C++_Dll - Fatal编程技术网

Visual c++ 如何管理加载dll';在visual c++; >Dan N,谢谢。lib的结构在生成时是受控的,对吗?可能存在两种选择:1。函数的实现可以在.lib中实现;2.函数的实现可以在与.lib同名的关联.dll中。还有其他选择吗?

Visual c++ 如何管理加载dll';在visual c++; >Dan N,谢谢。lib的结构在生成时是受控的,对吗?可能存在两种选择:1。函数的实现可以在.lib中实现;2.函数的实现可以在与.lib同名的关联.dll中。还有其他选择吗?,visual-c++,dll,Visual C++,Dll,有不同的方法指示操作系统加载dll。最常见的方法是链接到.lib文件(通过项目的链接器设置),其中.lib是与DLL关联的构建时存根。当链接器在链接阶段找到这个.lib文件时,它知道DLL是必需的,并在内部修改EXE以告诉操作系统DLL必须存在才能运行程序 当程序稍后运行时,操作系统首先查找所有必需的DLL,甚至在开始执行程序代码之前。如果缺少这些DLL中的任何一个,操作系统将抛出一个错误,弹出一个错误框,程序将不会运行 也可以动态加载DLL,但这并不常见。动态加载DLL实际上非常常见。我们会想

有不同的方法指示操作系统加载dll。最常见的方法是链接到.lib文件(通过项目的链接器设置),其中.lib是与DLL关联的构建时存根。当链接器在链接阶段找到这个.lib文件时,它知道DLL是必需的,并在内部修改EXE以告诉操作系统DLL必须存在才能运行程序

当程序稍后运行时,操作系统首先查找所有必需的DLL,甚至在开始执行程序代码之前。如果缺少这些DLL中的任何一个,操作系统将抛出一个错误,弹出一个错误框,程序将不会运行


也可以动态加载DLL,但这并不常见。

动态加载DLL实际上非常常见。我们会想到两种常见的使用情形:1)插件系统,2)支持仅在Windows较新版本中可用的附加功能,同时保留与较旧版本(例如,
dwmapi.dll
中定义的DWM API)的向后兼容性.很公平-我自己也做了很多动态加载DLL的工作。除了我的印象之外,我不确定动态加载和静态加载的DLL的百分比。我的问题实际上是关于静态加载的。---如何在.lib中控制DLL的加载?通过源代码或配置?它完全由.lib的结构控制。链接器查看.lib的内部结构(在构建时),发现函数已声明但未定义(这完全是.lib的内部结构);然后链接器将特殊指令构建到.exe中,告诉操作系统当.exe运行时,该名称的DLL必须存在,并且必须具有匹配的函数。所有这些都不受源代码控制。这是一个链接器设置,用于将.lib传递给链接器。>>Dan N,谢谢。lib的结构在生成时是受控的,对吗?可能存在两种选择:1。函数的实现可以在.lib中实现;2.函数的实现可以在与.lib同名的关联.dll中。还有其他选择吗?