0
imgres32.dll
からイメージをロードしようとしています。私はこのようにそれをやろうとしている:C#LoadImageがエラーを返します。1813
は、DLLをロードします。
dll_h = LoadLibrary(@"C:\Windows\System32\imgres32.dll");
はressourceのロードを行う私の機能にハンドルを渡します。
Bitmap b = GetImageResource(dll_h, "1002");
機能を次のようになります。
static Bitmap GetImageResource(IntPtr handle, string resourceId)
{
IntPtr img_ptr = NativeMethods.LoadImage(handle, resourceId, IMAGE_BITMAP, 0, 0, 0);
if (img_ptr == IntPtr.Zero)
throw new System.ComponentModel.Win32Exception((int)NativeMethods.GetLastError());
return Image.FromHbitmap(img_ptr);
}
入力するパラメータに関係なく、エラーコード1813は常に
指定されたリソースタイプがイメージファイル内に見つかりません。
Visual Studioでファイルを開くと、1002
の画像を含むIcon
という名前のフォルダが表示されます。
私はそれをクリックすると、それは解像度16 x 16
のものを含む、異なる解像度で、いくつかのビットマップ画像が含まれている私を示しています。私はどちら
LoadImage(handle, resourceId, IMAGE_BITMAP, 16, 16, 0);
を呼び出していない場合は、このない他のパラメータの組み合わせが作業を行います。しかし、私は常にエラー
1813
を取得します。
IMAGE_BITMAP
はIMAGE_ICON
とIMAGE_CURSOR
と同じ文書hereよう0
に一定のint型の集合であり、それらのどれも機能しません。
助けを非常に感謝します。ありがとう。
そうです。または、文字列ではなく、ネイティブのLoadImageメソッドにunsigned intを渡すことで、MAKEINTRESOURCEマクロを模倣することができます: '[DllImport(" user32.dll "、SetLastError = true、CharSet = CharSet.Auto)] public static extern IntPtr LoadImage(IntPtr hinst、uint uId、uint uType、int cxDesired、int cyDesired、uint fuLoad); 'その後、整数1002を使用できます。 – Yosh