LoadPackagedLibrary 在 XBox 上失败并显示 ERROR_MOD_NOT_FOUND

LoadPackagedLibrary failes with ERROR_MOD_NOT_FOUND on XBox

我目前正在尝试使用 LoadPackagedLibrary(...) 函数在 UWP 应用程序中加载自己编写的动态 link 模块(使用 /ZW /EHsc 编译)。由于构建库的方式,需要动态加载所有库。我已将 DLL 包含在项目中并将其作为内容启用(已验证:它至少像预期的那样被复制到 XBox)。

万一我 运行 我在 Windows 上的应用程序一切正常。但是,一旦我在 XBox 上启动我的应用程序 LoadPackagedLibrary(...) 就失败了 ERROR_MOD_NOT_FOUND。在 Visual Studio 输出 window 中,我可以看到 XBox 加载我的 DLL 没有问题,但加载后直接丢弃它:

"DAServerUWP.exe" (Win32): "D:\DevelopmentFiles\<<MYAPP>>\SampleDAClient.dll" geladen. Symbole wurden geladen.
"DAServerUWP.exe" (Win32): "D:\DevelopmentFiles\<<MYAPP>>\SampleDAClient.dll" wurde entladen.

我怀疑这与 Package.appxmanifest 没有正确(或目前根本没有)指定 DLL 有关。但是我没有在网上找到那么多信息,也没有任何建议的解决方案有效。

编辑:以下是如何在 .vcxproj:

中定义 DLL 的行
<ItemGroup>
   <None Include="SampleDAClient.dll">
      <DeploymentContent>true</DeploymentContent>
   </None>
</ItemGroup>

Edit2:可能与dll依赖有关。这些是我的库依赖项:

与本机 UWP dll 相比,它看起来完全不同:

要编译 UWP DLL,您需要将这些参数传递给编译器:

/D__WRL_NO_DEFAULT_LIB__ /DWINAPI_FAMILY=WINAPI_FAMILY_APP /MD

以及这些链接器标志:

/APPCONTAINER /NODEFAULTLIB:ole32.lib /NODEFAULTLIB:kernel32.lib /NODEFAULTLIB:user32.lib /NODEFAULTLIB:msvcrt.lib windowsapp.lib

此外,您需要为链接器指定一个不同的 LIBPATH。而不是这个:

/LIBPATH:<VSDIR>\VC\Tools\MSVC\<MSVC_VERSION>\lib\x64

您需要将此 LIBPATH 传递给链接器:

/LIBPATH:<VSDIR>\VC\Tools\MSVC\<MSVC_VERSION>\lib\x64\store