在一个dll中loadbitmap一个位图,hBitmap = LoadBitmap(GetModuleHandle(NULL),MAKEINTRESOURCE(IDB_VOLUME)),getlasterror返回1813,
改成hBitmap = LoadBitmap(NULL,MAKEINTRESOURCE(IDB_VOLUME))时返回1814,
上面两种情况位图都已经加载到资源中了,用LoadImage一样的错误。
是不是和hist有关?请大家指点一二!

解决方案 »

  1.   

    MAKEINTRESOURCE是VC的宏,VB中没见过。
    以下是我的示例代码:
    Private Declare Function LoadBitmap Lib "user32" Alias "LoadBitmapA" (ByVal hInstance As Long, ByVal lpBitmapName As Long) As Long
    Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
    Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As LongPrivate Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As Long
    Private Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As Long
    Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As LongDim hBitmap As Long, hPrevBitmap As Long
    Dim hMemoryDC As Long
    Private Sub Form_Load()
        hMemoryDC = CreateCompatibleDC(Me.hdc) '创建一个内存DC
        hBitmap = LoadBitmap(App.hInstance, 101) '获得资源中的位图
        hPrevBitmap = SelectObject(hMemoryDC, hBitmap) '将位图选入内存DC
    End SubPrivate Sub Form_Paint()
        BitBlt Me.hdc, 0, 0, 100, 100, hMemoryDC, 0, 0, vbSrcCopy '将内存DC中的位图复制到窗口DC
    End SubPrivate Sub Form_Unload(Cancel As Integer)
        Call SelectObject(Me.hdc, hPrevBitmap) '移出内存DC中的位图
        DeleteObject (hBitmap) '释放打开位图时占用的内存资源
        DeleteDC (hMemoryDC) '释放内存DC占用的内存资源
    End Sub注意事项:
    一、注意我的LoadBitmap API声明。
    二、由于在IDE环境中,资源中添加位图时自动产生的ID号会与IDE环境中固有资源的ID号冲突,运行时结果是不正确的,所以必须编译后单独运行才能得到正确结果。
    三、窗口的AutoDraw属性必须为False,否则也不能正确显示。
      

  2.   

    补充一下,hBitmap = LoadBitmap(App.hInstance, 101)语句中101是资源中位图的ID号。