winapi – 在Windows RT中从桌面应用加载“comctl32.dll”失败

前端之家收集整理的这篇文章主要介绍了winapi – 在Windows RT中从桌面应用加载“comctl32.dll”失败前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
使用 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",GetLastError());
hModule = LoadLibraryA("comctl32.dll");
printf("Load Library comctl32.dll : %x with Err: %x\n",GetLastError());

解决方法

But loading Microsoft approved dll like user32.dll and comctl32.dll is possible

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

Microsoft没有理由让comctl32.dll在Store应用程序的沙箱中工作.因此预计它将无法工作.

可以加载kernel32和user32,这些DLL确实包含已批准的winapi函数.但是,使用未在批准列表中的任何功能将使您在验证测试中失败.你不能发布这样的应用程序.

猜你在找的Windows相关文章