Не удалось загрузить "comctl32.dll" из настольного приложения в Windows RT

Используя метод, описанный в http://forum.xda-developers.com/showthread.php?t=1944675 я выполнил настольное приложение win32 на своей поверхности с Windows RT.

Возможна загрузка Windows, таких как user32.dll, kernel32.dll, gdi32.dll и т. Д., С помощью LoadLibrary. Но когда я пытаюсь загрузить "comctl32.dll" или "comdlg32.dll", используя LoadLibrary, он возвращает 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());

2 ответа

Решение

Но возможна загрузка утвержденных Microsoft dll, таких как user32.dll и comctl32.dll

Ваше предположение, что comctl32.dll "одобрен", неверно. Ни одна из его экспортируемых функций не входит в список функций winapi, которые можно использовать в приложении Store. Его единственное использование состоит в том, чтобы обеспечить реализацию общих элементов управления, ни один из которых не может использоваться в приложении Store. Он может быть использован только для настольных приложений, вы не можете написать их самостоятельно в Windows RT.

У Microsoft не было причин заставить comctl32.dll работать в песочнице для приложения Store. Таким образом, ожидается, что он не будет работать.

Возможна загрузка kernel32 и user32, эти DLL-библиотеки содержат одобренные функции winapi. Однако использование любой функции, отсутствующей в утвержденном списке, приведет к сбою в проверочном тесте. Вы не можете опубликовать такое приложение.

Обычно, когда я использую ComCtl32.dll, я также добавляю зависимость манифеста, как описано в этой статье MSDN (особенно в этом разделе). Не уверен, что именно по этой причине вы не можете загрузить его, но если вы хотите использовать его каким-либо образом, вам, вероятно, нужно добавить информацию о манифесте.

Не знаю, как ComDlg32.dll.

Другие вопросы по тегам