首页 > 解决方案 > UWP 应用程序中的 SEHException - 尝试为 SDK 加载 DLL

问题描述

我正在尝试在 UWP 桌面应用程序中使用SDK,但我被一个我不知道是什么意思或如何修复它的异常阻止:InteropServices.SEHException

我已经获得了 SDK 的C# 包装器的源代码,我已经成功地将其构建为 UWP 类库(它已经在 nuget 上可用,但我想也许我需要专门为 UWP 构建它 - 看起来不像情况不再)。

从调试信息来看,DLL被加载,并且委托的指针指向某处,但是在这部分包装代码上抛出了异常:

int controllerCount = EnumerateGpuController(IntPtr.Zero, 0);

该函数定义为:

internal int EnumerateGpuController(IntPtr handles, int size) => 
enumerateGpuControllerPointer(handles, size);

指针由此获得:

enumerateGpuControllerPointer = (EnumerateGpuControllerPointer)
Marshal.GetDelegateForFunctionPointer(NativeMethods.GetProcAddress(dllHandle, "EnumerateGPU"), typeof(EnumerateGpuControllerPointer));

确认加载后,dllHandle 似乎有效。DLL 位于项目的根目录中,并作为内容构建,并在构建时复制到 Debug 目录。

是否有解决此问题的方法,或者这是 UWP 的沙箱,无法使用外部 DLL?

标签: c#dlluwpsdk

解决方案


UWP 不支持从外部程序集动态加载和执行代码。

您需要加载的所有库都必须在 appx 本身中。

我将为您提供一个链接,以进一步阅读有关此主题的更多信息。

在类似问题上链接到 msdn


推荐阅读