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」または「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", hModule, GetLastError());
hModule = LoadLibraryA("comctl32.dll");
printf("Load Library comctl32.dll : %x with Err: %x\n", hModule, GetLastError());
4

2 に答える 2

1

ただし、user32.dll や comctl32.dll などの Microsoft 承認の dll をロードすることは可能です。

comctl32.dll が「承認済み」であるというあなたの仮定は間違っています。エクスポートされた関数は、Store アプリで使用できる 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 に答える