我使用依赖于Python 3.3和libVLC的Visual Studio 2013在Windows 8.1 x64上编写32位C ++应用程序。我在我的可执行文件所在的目录中有python33.dll,libvlc.dll和libvlccore.dll,我也将其设置为Project>下的工作目录。属性>调试。 According to MSDN,除非您正在使用更改后的搜索路径(仅当您在运行时使用LoadLibraryEx加载DLL时才适用;在我的情况下,这些DLL在加载时加载),应始终在系统目录之前搜索应用程序目录。但是,根据Visual Studio,所有这三个DLL都是从C:\ Windows \ SysWOW64加载的。这引起了我的问题,因为我所拥有的libVLC版本比我尝试使用的版本要早得多。
该MSDN文章仅列出了正常搜索过程的3个例外。这些DLL在进程启动时立即加载,所以很明显它不可能已经加载了系统版本(但是为了确保,我创建了一个.local文件,因为它提到重定向会覆盖它,并且它有没有效果)。我已经检查了注册表,看他们没有以某种方式注册为"已知的DLL",所以这似乎不是问题所在。将python33作为Boost.Python的依赖项加载是可能的,但即使它只是按名称加载,仍应首先搜索app目录,并且在任何情况下我的其他依赖项都不会引用VLC。作为猜测,我尝试将VLC库标记为延迟加载(由于数据导入,我无法使用Python),并且我收到了以下警告,我发现这些警告很有趣:
1>LINK : warning LNK4199: /DELAYLOAD:libvlc.dll ignored; no imports found from libvlc.dll
1>LINK : warning LNK4199: /DELAYLOAD:libvlccore.dll ignored; no imports found from libvlccore.dll
但是,dumpbin显示我编译的exe从libvlc.dll导入了几个函数。
我当然可以替换或删除系统版本,但如果我尝试分发此应用程序,那么这不是真正的解决方案。我不确定还有什么会导致这种情况。任何人都可以在其他任何地方建议我看看吗?