有没有办法告诉编译时使用的每个DLL的完整路径?
我正在尝试创建一个具有易于Marshal函数的DLL,以便在C#应用程序和文件系统Minifilter之间进行通信(目前使用Minispy示例来检查一切是否正常运行)。
在Visual Studio 2013中使用“Win32”作为我的目标平台时,它已成功编译并运行,但是在使用printf打印指针时(“%p”,...);他们的长度只有8个字符,他们本应该是16个(我的电脑是64位),它会抛弃未来的指针杂乱。
我的活跃解决方案平台一直是其他项目的x64。遗憾的是,将配置管理器中的平台更改为DLL的x64会在编译期间生成以下错误:
错误1错误LNK1112:模块机器类型'X86'与目标机器类型'x64'冲突
我在网上查了一下,这似乎是解决方案某些部分的配置问题,但我的所有项目都应该在x64中进行编译。清除和重建以删除旧文件也没有任何效果。
我已经使用dumpbin.exe来检查我认为我的库链接到的DLL的机器类型,一切看起来都是有序的。我通过检查项目属性中的链接器命令行选项获得了这些选项,但是它们的名称没有显示它们的读取位置(例如:kernel32.lib; user32.lib; gdi32.lib; fltLib.lib ...)。由于我仍然遇到这个问题,我认为它可能链接到相同DLL的错误(32位)版本。
有没有办法告诉编译时使用的每个DLL的完整路径?或者更好的是,有没有办法告诉哪个DLL具体导致LINK1112错误?
我已经使用了/ VERBOSE:LIB命令并删除了/ NOLOGO选项,但是输出没有给人留下深刻印象,在没有其他信息的情况下执行命令后立即停止。
答案 0 :(得分:0)
几个月前,当我解决这个问题时,我应该已经回答了这个问题,但是我忘了把它贴在这里。但我会试着回忆一下我的所作所为。
最后,如果我没记错的话,我很确定救了我的是在成功编译的(x86)库上使用Dependency Walker。我之前使用过它,但是我在错误的模式下运行它(x64或x86)并使用正确的模式显示x64架构缺少的模块。