2016-09-15 25 views
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という名前のフォルダが表示されます。

enter image description here

私はそれをクリックすると、それは解像度16 x 16のものを含む、異なる解像度で、いくつかのビットマップ画像が含まれている私を示しています。私はどちら

LoadImage(handle, resourceId, IMAGE_BITMAP, 16, 16, 0); 
を呼び出していない場合は、このない他のパラメータの組み合わせが作業を行います。しかし、私は常にエラー 1813を取得します。

IMAGE_BITMAPIMAGE_ICONIMAGE_CURSORと同じ文書hereよう0に一定のint型の集合であり、それらのどれも機能しません。

助けを非常に感謝します。ありがとう。

答えて

1

リソースIDの先頭に#を付ける必要があります。この方法で呼び出す:

GetImageResource(dll_h, "#1002"); 
+0

そうです。または、文字列ではなく、ネイティブの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

関連する問題