Vb6 &引用;宣布;语句是否是绕过.dll地狱的另一种方法?
令我惊讶的是,我发现了VB6代码,它使用Vb6 &引用;宣布;语句是否是绕过.dll地狱的另一种方法?,vb6,dll,Vb6,Dll,令我惊讶的是,我发现了VB6代码,它使用Declare语句来定义.dll中的函数,该函数位于程序文件夹中,而没有在Windows上注册。这似乎是一种避免.dll地狱的超级简单方法,而不必求助于使用并行清单。我能在什么地方多读一些关于这方面的资料吗?是否存在障碍?Windows在一系列有文档记录的文件夹中进行搜索(VB6在后台使用这些文件夹来解决声明问题)。由于搜索文件夹列表上的第一个位置是应用程序自己的文件夹,因此您的发现非常有意义 不过,它在很大程度上并不能解决“DLL地狱”问题。例如,它不能
Declare
语句来定义.dll中的函数,该函数位于程序文件夹中,而没有在Windows上注册。这似乎是一种避免.dll地狱的超级简单方法,而不必求助于使用并行清单。我能在什么地方多读一些关于这方面的资料吗?是否存在障碍?Windows在一系列有文档记录的文件夹中进行搜索(VB6在后台使用这些文件夹来解决声明问题)。由于搜索文件夹列表上的第一个位置是应用程序自己的文件夹,因此您的发现非常有意义
不过,它在很大程度上并不能解决“DLL地狱”问题。例如,它不能用于系统DLL,因为Windows预加载了大部分DLL。此外,如果某个DLL已加载到内存中,Windows可能会使用该DLL的副本(不共享数据,但代码可以重用)
这是创建清单的部分原因;它们允许应用程序严格定义所需的系统DLL版本,以提供某些功能。VB6的技术是老式的(就像VB6一样)。Windows在一系列有文档记录的文件夹中进行搜索(VB6在后台使用这些文件夹来解析声明)。由于搜索文件夹列表上的第一个位置是应用程序自己的文件夹,因此您的发现非常有意义 不过,它在很大程度上并不能解决“DLL地狱”问题。例如,它不能用于系统DLL,因为Windows预加载了大部分DLL。此外,如果某个DLL已加载到内存中,Windows可能会使用该DLL的副本(不共享数据,但代码可以重用)
这是创建清单的部分原因;它们允许应用程序严格定义所需的系统DLL版本,以提供某些功能。VB6的技术是老式的(就像VB6一样)。声明语句用于“及时”绑定到非ActiveX DLL。在程序“接触”已声明的入口点之前,不会尝试加载库 它基本上与DLL地狱的主题无关 糊涂的想法甚至会导致人们将ActiveX DLL“放在”EXE旁边,这实际上会导致DLL地狱,因为这样做的人在安装和卸载应用程序时也会使用糟糕的技术
libs
等文件夹中。可能的例外情况可能是非COM DLL,例如您希望与一起使用Declare
关于舱单也有很多误解,其中有多种。您可能正在考虑的是应用程序和程序集清单
它们可以用于在并排安装的库的不同版本之间进行选择,也可以用于隔离应用程序和程序集,而这些应用程序和程序集是与DLL shell相关的部分
当然,可以使用应用程序清单来指定Windows应如何运行应用程序的许多其他事项。使用
Declare
语句对非ActiveX DLL进行“即时”绑定。在程序“接触”已声明的入口点之前,不会尝试加载库
它基本上与DLL地狱的主题无关
糊涂的想法甚至会导致人们将ActiveX DLL“放在”EXE旁边,这实际上会导致DLL地狱,因为这样做的人在安装和卸载应用程序时也会使用糟糕的技术
libs
等文件夹中。可能的例外情况可能是非COM DLL,例如您希望与一起使用Declare
关于舱单也有很多误解,其中有多种。您可能正在考虑的是应用程序和程序集清单
这些