4

使用http://forum.xda-developers.com/showthread.php?t=1944675中描述的方法,我使用 Windows RT 在我的表面上执行了一个 win32 桌面应用程序。

可以使用LoadLibrary加载诸如user32.dll、kernel32.dll、gdi32.dll等windows dll 。但是当我尝试使用LoadLibrary加载“comctl32.dll”“c​​omdlg32.dll”时,它返回NULL。

GetLastError()返回的错误代码是1114。这意味着“动态链接库 (DLL) 初始化例程失败。”

编辑:当我测试为 x86 编译的应用程序时,它可以正常工作。当我为 ARM 构建它并在 Windows RT 下运行时,发生了这个错误。

示例代码:

HMODULE hModule;
hModule = LoadLibraryA("user32.dll");
printf("Load Library user32.dll : %x with Err: %x\n", hModule, GetLastError());
hModule = LoadLibraryA("kernel32.dll");
printf("Load Library kernel32.dll : %x with Err: %x\n", hModule, GetLastError());
hModule = LoadLibraryA("comctl32.dll");
printf("Load Library comctl32.dll : %x with Err: %x\n", hModule, GetLastError());
4

2 回答 2

1

但是可以加载 Microsoft 批准的 dll,例如 user32.dll 和 comctl32.dll

您认为 comctl32.dll 被“批准”的假设是错误的。它的所有导出函数都不在可在商店应用程序中使用的 winapi 函数列表中。它的唯一用途是为通用控件提供一个实现,这些控件都不能在商店应用程序中使用。它只能用于桌面应用程序,不能在 Windows RT 上自己编写。

Microsoft 没有理由让 comctl32.dll 在应用商店应用的沙箱中工作。因此,预计将无法正常工作。

加载 kernel32 和 user32 是可能的,这些 DLL确实包含批准的 winapi 函数。但是,使用任何不在批准列表中的功能都会导致您在验证测试中失败。您无法发布这样的应用程序。

于 2013-01-06T12:34:37.313 回答
0

通常,当我使用 ComCtl32.dll 时,我还会添加一个清单依赖项,如本 MSDN 文章(特别是本节)中所述。不确定这是否是您无法加载它的原因,但如果您想以任何方式使用它,您可能需要添加清单信息。

不知道 ComDlg32.dll。

于 2013-01-06T09:35:25.130 回答