使用
http://forum.xda-developers.com/showthread.php?t=1944675中描述的方法,我使用Windows RT在我的表面执行了win32桌面应用程序.
可以使用LoadLibrary加载像user32.dll,kernel32.dll,gdi32.dll等的Windows dll.
但是当我尝试使用LoadLibrary加载“comctl32.dll”或“comdlg32.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函数.但是,使用未在批准列表中的任何功能将使您在验证测试中失败.你不能发布这样的应用程序.