DLLからの呼び出し
Posted: 2006年4月04日(火) 15:52
最近、質問ばかりしている私ですが、以前投稿されていたDLLからツールバーのビットマップを取り出す方法がいまいちよく分からないので、教えていただけないでしょうか?自分では考えてもいるんですが、なかなか答えといったものが出ません。私がしたいことは、DLLにビットマップと関数を両方詰め込んで、それをプログラムのほうで呼び出すだけにしたいのですが
コード: 全て選択
#include "BitmapDLL.idx"
'-------------------------------------------------------------------
' メモ - このファイルには、DLLの構成要素を記述します。
' (例:関数定義、グローバル変数、定数定義など)
'
' エクスポートが必要な関数には、"Export" 修飾子を指定します。
' (例:Function Export FuncName() As Long)
'-------------------------------------------------------------------
Dim hInstance As HINSTANCE
Function Export DllMain(hinstDLL As HINSTANCE, fdwReason As DWord, lpvReserved As VoidPtr) As Long
'DLLエントリポイント
Select Case fdwReason
Case DLL_PROCESS_ATTACH
'DLLがプロセス空間にロードされた時に実行されます。
hInstance=hinstDLL
_System_StartupProgram()
DllMain=1
End Select
End Function
'もっとなんかいいやり方がある気がする
Function Export GetResourceNumber(ByVal lpBitmapResourceName As BytePtr) As Long
Select Case 0
Case lstrcmp("IDB_BITMAP1",lpBitmapResourceName)
GetResourceNumber=IDB_BITMAP1
Case lstrcmp("IDB_BITMAP2",lpBitmapResourceName)
GetResourceNumber=IDB_BITMAP2
Case Else
GetResourceNumber=FALSE
End Select
End Function
'指定されたリソース値からビットマップハンドルを取得します。
Function Export LoadResourceBitmap(ByVal lpBitmapResourceNumber As Long) As HBITMAP
LoadResourceBitmap=LoadImage(hInstance,lpBitmapResourceNumber As *Byte,IMAGE_BITMAP,NULL,NULL,LR_DEFAULTCOLOR or LR_DEFAULTSIZE) As HBITMAP
End Function
コード: 全て選択
Declare Function LoadResourceBitmap Lib "BitmapDLL" (ByVal lpBitmapResourceNumber As Long) As HBITMAP
Declare Function GetResourceNumber Lib "BitmapDLL" (ByVal lpBitmapResourceName As BytePtr) As Long
Dim hDC As HDC
Dim hMemDC As HDC
Dim hBitmap As HBITMAP
Dim BitmapReport As BITMAP
hDC=GetDC(hMainWnd)
hMemDC=CreateCompatibleDC(hDC)
'ここでDLLの関数を使ってDLLからビットマップハンドルを取得しています。
hBitmap=LoadResourceBitmap(GetResourceNumber("IDB_BITMAP1"))
GetObject(hBitmap,SizeOf(BITMAP),BitmapReport)
SelectObject(hMemDC, hBitmap)
BitBlt(hDC,0,0,BitmapReport.bmWidth,BitmapReport.bmHeight,hMemDC,0,0,SRCCOPY)
DeleteDC(hMemDC)
ReleaseDC(hMainWnd,hDC)
コード: 全て選択
Function Export CreateToolbarDx(ByVal hWnd As HWND,ByVal dwStyle As DWord,ByVal wID As DWord,ByVal nBitmaps As Long,ByVal hBitmap As HBITMAP,ByVal lpButtons As VoidPtr,ByVal iNumButtons As Long,ByVal dxButton As Long,ByVal dxBitmap As Long,ByVal dyBitmap As Long,ByVal uStructSize As DWord) As HWND
CreateToolbarDx=CreateToolbarEx(hWnd,dwStyle,wID,nBitmaps,NULL,hBitmap,lpButtons,iNumButtons,dxButton,dyButton,dxBitmap,dyBitmap,uStructSize)
End Function
コード: 全て選択
Function Export CreateToolbarDx(ByVal hWnd As HWND,ByVal dwStyle As DWord,ByVal wID As DWord,ByVal nBitmaps As Long,ByVal hBitmap As HBITMAP,ByVal lpButtons As VoidPtr,ByVal iNumButtons As Long,ByVal dxButton As Long,ByVal dyButton As Long,ByVal dxBitmap As Long,ByVal dyBitmap As Long,ByVal uStructSize As DWord) As HWND
CreateToolbarDx=CreateToolbarEx(hWnd,dwStyle,wID,nBitmaps,NULL,hBitmap,lpButtons,iNumButtons,dxButton,dyButton,dxBitmap,dyBitmap,uStructSize)
End Function
コード: 全て選択
Function Export GetResourceNumber(ByVal lpBitmapResourceName As BytePtr) As Long
Select Case 0
Case lstrcmp("IDB_BITMAP1",lpBitmapResourceName)
GetResourceNumber=IDB_BITMAP1
/*
Case lstrcmp("IDB_BITMAP2",lpBitmapResourceName)
GetResourceNumber=IDB_BITMAP2
*/
Case Else
GetResourceNumber=FALSE
End Select
End Function
コード: 全て選択
Declare Function CreatToolBarDx Lib "BitmapDLL" (ByVal hWnd As HWND,ByVal dwStyle As DWord,ByVal wID As DWord,ByVal nBitmaps As Long,ByVal hBitmap As HBITMAP,ByVal lpButtons As VoidPtr,ByVal iNumButtons As Long,ByVal dxButton As Long,ByVal dyButton As Long,ByVal dxBitmap As Long,ByVal dyBitmap As Long,ByVal uStructSize As DWord) As HWND
コード: 全て選択
Dim hInstance As HINSTANCE
Function Export DllMain(hinstDLL As HINSTANCE, fdwReason As DWord, lpvReserved As VoidPtr) As Long
'DLLエントリポイント
Select Case fdwReason
Case DLL_PROCESS_ATTACH
'DLLがプロセス空間にロードされた時に実行されます。
hInstance=hinstDLL
_System_StartupProgram()
DllMain=1
End Select
End Function
Function Export GetResourceNumber(ByVal lpBitmapResourceName As BytePtr) As Long
GetResourceNumber=FALSE
Select Case 0
Case lstrcmp("IDB_BITMAP1",lpBitmapResourceName)
GetResourceNumber=IDB_BITMAP1
End Select
End Function
Function Export LoadResourceBitmap(ByVal lpBitmapResourceNumber As Long) As HBITMAP
LoadResourceBitmap=LoadImage(hInstance,lpBitmapResourceNumber As *Byte,IMAGE_BITMAP,NULL,NULL,LR_DEFAULTCOLOR or LR_DEFAULTSIZE) As HBITMAP
End Function
Function Export CreateToolbarDx(ByVal hWnd As HWND,ByVal dwStyle As DWord,ByVal wID As DWord,ByVal nBitmaps As Long,ByVal hBitmap As HBITMAP,ByVal lpButtons As VoidPtr,ByVal iNumButtons As Long,ByVal dxButton As Long,ByVal dyButton As Long,ByVal dxBitmap As Long,ByVal dyBitmap As Long,ByVal uStructSize As DWord) As HWND
CreateToolbarDx=CreateToolbarEx(hWnd,dwStyle,wID,nBitmaps,NULL,hBitmap As DWord,lpButtons,iNumButtons,dxButton,dyButton,dxBitmap,dyBitmap,uStructSize)
End Function
コード: 全て選択
Declare Function LoadResourceBitmap Lib "BitmapDLL" (ByVal lpBitmapResourceNumber As Long) As HBITMAP
Declare Function GetResourceNumber Lib "BitmapDLL" (ByVal lpBitmapResourceName As BytePtr) As Long
Declare Function CreateToolbarDx Lib "BitmapDLL" (ByVal hWnd As HWND,ByVal dwStyle As DWord,ByVal wID As DWord,ByVal nBitmaps As Long,ByVal hBitmap As HBITMAP,ByVal lpButtons As VoidPtr,ByVal iNumButtons As Long,ByVal dxButton As Long,ByVal dyButton As Long,ByVal dxBitmap As Long,ByVal dyBitmap As Long,ByVal uStructSize As DWord) As HWND