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
我目前正在尝试使用 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
:
<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