【问题标题】:Referencing native C++ DLL in C++ windows app only works when added as reference在 C++ windows 应用程序中引用本机 C++ DLL 仅在添加为引用时才有效
【发布时间】:2015-03-23 15:44:03
【问题描述】:

Visual Studio 2013/2015:

我有一个空白的 C++ Windows 应用商店应用程序和同一解决方案中最简单的 DLL,仅导出 void foo() {}

在例如使用这个 DLL Win32 控制台应用程序在包含 DLL 的标头并将 *.lib 文件添加到链接器依赖项的情况下按预期工作。

但是,尝试在 Windows 应用商店应用程序中使用此 DLL 在程序启动时出现异常,消息框 Unhandled exception at 0x77F0E052 (ntdll.dll) in App5.exe: 0xC0000135: Unable to Locate DLL. 和调试控制台中的以下输出:

'App5.exe' (Win32): Loaded 'C:\Users\naitsirhc\Documents\Visual Studio 2015\Projects\App5\Debug\App5\AppX\App5.exe'. Symbols loaded.
'App5.exe' (Win32): Loaded 'C:\Windows\SysWOW64\ntdll.dll'. Cannot find or open the PDB file.
'App5.exe' (Win32): Loaded 'C:\Windows\SysWOW64\kernel32.dll'. Cannot find or open the PDB file.
'App5.exe' (Win32): Loaded 'C:\Windows\SysWOW64\KernelBase.dll'. Cannot find or open the PDB file.
First-chance exception at 0x77F0E052 (ntdll.dll) in App5.exe: 0xC0000135: Unable to Locate DLL.
Unhandled exception at 0x77F0E052 (ntdll.dll) in App5.exe: 0xC0000135: Unable to Locate DLL.
The program '[4168] App5.exe' has exited with code 0 (0x0).

现在,如果我只是简单地将 DLL 添加为对 Windows 应用商店应用程序的引用(通过属性 -> 通用属性 -> 引用),那么它就可以工作了。

我比较了编译器和链接器的命令行,它们是相同的。

我错过了什么?网络上有许多示例,但除了一个之外,所有示例都只是将 *.lib 文件添加到链接器的依赖项中,这也是我更愿意做的。

【问题讨论】:

  • 应包含本机 Dll 以存储应用程序包以在运行时可用,这是通过添加引用来完成的。

标签: c++ dll visual-studio-2013 windows-store-apps visual-studio-2015


【解决方案1】:

您需要将 DLL 作为内容包含在 appxpackage 中。将其添加为参考将自动执行此操作,但您也可以将其显式设置为内容。将 DLL 添加到项目中,以便它显示在解决方案资源管理器中。右键单击解决方案资源管理器中的 DLL,然后选择属性。在属性窗格中,将 DLL 的内容设置为“True”:

这是一个部署设置,而不是构建或链接设置,因此它不会影响编译器或链接器的参数。项目文件将更新为包含以下内容:

<ItemGroup>
    <None Include="Foo.dll">
        <DeploymentContent>true</DeploymentContent>
    </None>
</ItemGroup>

这将导致 DLL 包含在部署 appxpackage 中。

【讨论】:

  • 我试过了,它有效,谢谢。不幸的是,我的问题不够精确。实际上,原生 C++ DLL 有两个项目模板:一个用于 windows 商店应用程序,一个用于 Win32 应用程序。前者可以(并且可能应该/必须)添加为对 Windows 应用商店应用程序的引用。后者不能作为参考添加(可以,但会显示一个消息框,表明项目类型不正确,应用程序将在启动时崩溃),但必须按照您的答案中的概述“打包”。但是只能添加debug DLL或者release DLL,不方便。
  • @naitsirhc 遵循底部的说明,其中提到编辑TargetFrameworkVersion 的项目文件。我遇到了同样的问题,这让我解开了:social.msdn.microsoft.com/Forums/vstudio/en-US/…
猜你喜欢
  • 2010-12-03
  • 2023-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多