C++ 如何重新分发同时包含32位DLL和64位DLL的软件?
我正在开发NPcap,这是一款开源的Windows数据包捕获软件,源于著名的WinPcap,并通过更多功能进行了增强 WinPcap的核心文件是wpcap.dll、packet.dll(在System32和SysWOW64中)和名为npf.sys的驱动程序。与WinPcap稍有不同,我们的NPcap将提供NPcap.dll、wpcap.dll、packet.dll和驱动程序NPcap.sys。npcap.dll是我们的npcap的“wpcap.dll”,npcap.sys是我们的npcap的“npf.sys”。dll是我们添加的一个包装器,以保持与原始WinPcap兼容C++ 如何重新分发同时包含32位DLL和64位DLL的软件?,c++,windows,dll,npcap,C++,Windows,Dll,Npcap,我正在开发NPcap,这是一款开源的Windows数据包捕获软件,源于著名的WinPcap,并通过更多功能进行了增强 WinPcap的核心文件是wpcap.dll、packet.dll(在System32和SysWOW64中)和名为npf.sys的驱动程序。与WinPcap稍有不同,我们的NPcap将提供NPcap.dll、wpcap.dll、packet.dll和驱动程序NPcap.sys。npcap.dll是我们的npcap的“wpcap.dll”,npcap.sys是我们的npcap的“n
在这里我遇到了一个问题:我们的用户软件包括nmap和Wireshark,它们可以是32位或64位。32位软件将仅使用32位DLL,64位软件将使用相同的DLL。如果我们将NPcap的wpcap.dll放入安装路径(如“C:\Program Files\NPcap”)并将此字符串添加到path环境变量中,我们无法将32位wpcap.dll和64位wpcap.dll都添加到“C:\Program Files\NPcap”中,因为它们共享相同的名称。我们希望保留“wpcap.dll”名称,因为我们需要与原始WinPcap保持兼容因此我们无法将“wpcap.dll”复制到System32和SysWOW64,因为WinPcap的wpcap.dll已经存在了还有一个问题,我们将32位DLL和64位DLL分别放在不同的目录中。如果我们将DLL分别放在“C:\Program Files\NPcap\x86”和“C:\Program Files\NPcap\x64”中。我们仍然需要将这两条路径放入系统PATH环境变量中,以便其他软件调用。这两个DLL路径将有一个顺序。后一个路径将被前一个路径覆盖,因为Windows加载程序将按DLL的文件名搜索DLL
有没有办法不将DLL复制到System32和SysWOW64路径中,同时解决32位和64位DLL的解决问题?创建子目录32\和64\(或x86\和x64)还有一个问题是,我们将32位DLL和64位DLL放在不同的目录中。如果我们将DLL分别放入“C:\Program Files\NPcap\x86”和“C:\Program Files\NPcap\x64”中。我们仍然需要将这两条路径放入系统PATH环境变量中,以便其他软件调用。这两个DLL路径将有一个顺序。后一个路径将被前一个路径覆盖,因为Windows加载程序按DLL的文件名搜索DLL。WinPcap如何解决此问题?(正确的解决方案是让“其他软件”知道如何调用正确版本的DLL,最好是随它一起提供。但在您的情况下,这不起作用。)WinPcap将其DLL放入system32和syswow64。NPcap的DLL名称与WinPcap的名称相同,因此我们无法使用这些路径来包含DLL。也许您可以将路径设置为DIR/%PROCESSOR\u ARCHITECTURE%/?根据这个链接,它返回当前进程的架构。因此,它应该解析到正确的目录。