使用 SysNative 在 Visual Studio 中创建 64 位应用程序

Posted

技术标签:

【中文标题】使用 SysNative 在 Visual Studio 中创建 64 位应用程序【英文标题】:Creating a 64-bit application in Visual Studio with SysNative 【发布时间】:2020-04-03 05:07:59 【问题描述】:

我正在尝试使用 C++ 中的 Visual Studio 构建一个 64 位应用程序

我需要访问 Windows 目录中的Sens.dll由于 Visual Studio 是 32 位应用程序,我必须使用 SysNative 而不是 System32

#import "C:/Windows/SysNative/Sens.dll"

因为文件系统重定向。

如果我将路径更改为 C:/Windows/System32/Sens.dll,Visual Studio 将无法访问它,因为它在构建时重定向到 SysWOW64。为了缓解这种情况,我可以使用SysNative,但生成的可执行文件是 64 位应用程序,SysNative 无法访问。

有什么办法可以解决吗?

File System Redirector 中给出了对 SysNative 更好的解释

【问题讨论】:

使用的路径在哪里?我看不到 VS 配置中的路径和您的应用程序中的路径如何相互关联,因为它们必须单独设置。并且不要链接到这样的外部资源。改为链接到official documentation 我正在尝试导入 Sens.dll 这些路径用作#import "C:/windows/system32/sens.dll" 这仍然没有解释路径如何相互关联。如果您手动加载 DLL,则 VS 不会读取代码中的路径。如果您让 Windows 自动加载 DLL,那么您的应用程序对 DLL 路径一无所知(并且它不需要知道这一点)。你需要展示真实的设置 使用 sysnative 就好了,#import 指令只在编译时有影响。所以你真正的问题与它无关,不管它是什么。 【参考方案1】:

不要像这样使用绝对路径导入

#import "C:/windows/system32/sens.dll"

在使用includeusingimport 时,您应该只使用相对路径。将路径添加到项目设置中的查找列表,然后只需 #import "sens.dll"

在这种情况下,DLL 位于 System32 中,因此只需将 $(SystemRoot)\SysNative 添加到 其他包含目录

【讨论】:

还是不行。它说No such file or directory found. 其他包含目录:$(SystemRoot) 尝试使用$(SystemRoot)\System32 & C:\Windows\System32 还是不行 @YogeshKumar 使用$(SystemRoot)\SysNative,因为这是 VS 预计会找到的地方。源代码中不需要"system32"【参考方案2】:

根据#import directive

语法:

#import "filename" [attributes]

#import <filename> [attributes]

我们无法使用绝对路径直接导入。我建议您可以尝试使用以下步骤:

    搜索 sens.dll 在您的代码库或 c: 中的位置

    C:\Windows\System32

    当您在第 1 步中找到任何路径时,您应该将该路径添加到您的项目的其他库目录

    右键单击项目 > 配置属性 > 链接器 > 常规 > 附加库目录。添加附加库目录的路径

【讨论】:

我建议您可以尝试在 Visual Studio 中打开 DLL(只需使用 File | Open | File,默认情况下它将在资源编辑器中打开)并查看 TYPELIB 资源是否存在。更多详情我建议您可以参考链接:***.com/questions/10031875/… 问题不在于 DLL 或导入路径。问题是 Visual Studio 是 32 位的,而我正在制作的应用程序是 64 位的。阅读问题由于 Visual Studio 是 32 位应用程序,我必须使用 SysNative 而不是 System32,但 SysNative 对 64 位应用程序不可见 "SysNative" 不是真正的目录。它被 WOW64 仿真系统重定向到真正的“System32”目录。只有通过 WOW64 在 64 位 Windows 上运行的 32 位应用程序才能使用此虚拟目录。如果您想在 C++ 中使用 Visual Studio 构建 64 位应用程序。我建议你可以参考链接:docs.microsoft.com/en-us/cpp/build/…

以上是关于使用 SysNative 在 Visual Studio 中创建 64 位应用程序的主要内容,如果未能解决你的问题,请参考以下文章

由“Sysnative”引发的思考

Visual Stu dio(vs)2015企业版有没有?

stu--CLEVR: A Diagnostic Dataset for Compositional Language and Elementary Visual Reasoning

Visual Studio 6.0 在 Windows 10 下崩溃的一种解决方法

Visual Studio 6.0 在 Windows 10 下崩溃的一种解决方法

是否有解析 SQLCMD 变量的选项,在 Visual-Studio 模式比较中进行比较?