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文件添加到链接器的依赖项中,这也是我更喜欢的。
答案 0 :(得分:2)
您需要将DLL作为内容包含在appxpackage中。将其添加为引用将自动执行此操作,但您也可以将其明确设置为内容。将DLL添加到项目中,以便它显示在解决方案资源管理器中。右键单击解决方案资源管理器中的DLL并选择属性。在属性窗格中,将DLL的内容设置为" True":
这是部署设置,而不是构建或链接设置,因此它不会影响编译器或链接器的参数。项目文件将更新为包含以下内容:
<ItemGroup>
<None Include="Foo.dll">
<DeploymentContent>true</DeploymentContent>
</None>
</ItemGroup>
这将导致DLL包含在部署appxpackage中。