目次 Contents
DLL内のリソースに埋め込まれたダイアログを表示するメソッドを用意し、外部から呼び出して表示する。
また、ダイアログの復帰値を、DLLのメソッド呼び出し元に返す。
以前、【C++】色を選択できるコンボボックス(ドロップダウンリスト)を作ってみた(MFC 未使用)で、作成したダイアログを、DLL内に移植し、VBAから呼び出せるようにしたものです。
#define COLORDIALOGDLL_API __declspec(dllexport)
extern "C"
{
COLORDIALOGDLL_API COLORREF WINAPI showColorComboDialog(
const VARIANT& vTitle,
const VARIANT& vMessage,
LPSAFEARRAY* ppsa,
const LONG lDefaultIndex);
}
引数 | In/Out | 内容 | 備考 |
---|---|---|---|
vTitle | In | ダイアログのタイトル | |
vMessage | In | ダイアログのメッセージ | |
ppsa | In | 表示する色データの配列 (SAFEARRAY)を指すポインタのポインタ |
|
lDefaultIndex | In | 表示時に選択する項目のインデックス | -1 指定で、表示時未選択 |
DllCaller ソースを参照して下さい。
宣言部 (DLLが 64bit専用で作ったので、32bit用の宣言はありません。)
Private Declare PtrSafe Function showColorComboDialog Lib "ColorDialogDLL.dll" _
(ByVal vTitle As Variant, _
ByVal vMessage As Variant, _
ByRef lColorList() As Long, _
ByVal lDefaultIndex As Long) As Long
実行部
色データは、Long の配列で渡して下さい。
DLL側では、COLORREF (DWORD)の配列として受け取るので、最下位Byteが、R(赤)となります。
Sub showColorDialog()
Dim vTitle As Variant
Dim vMessage As Variant
Dim lColorList() As Long
Dim lColor As Long
Dim i As Long
vTitle = "Request From VBA"
vMessage = "色を選んで下さい。"
Call setColor1(lColorList)
lColor = showColorComboDialog(vTitle, vMessage, lColorList, 8)
Debug.Print Right$("00000" & Hex(lColor), 6)
End Sub
Sub setColor1(ByRef lArry() As Long)
ReDim lArry(15)
lArry(0) = &HFFFFFF
lArry(1) = &HC0C0C0
lArry(2) = &H808080
lArry(3) = &H0&
lArry(4) = &HFF&
lArry(5) = &H80&
lArry(6) = &HFFFF&
lArry(7) = &H8080&
lArry(8) = &HFF00&
lArry(9) = &H8000&
lArry(10) = &HFFFF00
lArry(11) = &H808000
lArry(12) = &HFF0000
lArry(13) = &H800000
lArry(14) = &HFF00FF
lArry(15) = &H800080
End Sub
- Windows 10 Home 64bit
- Visual Studio 2022
- Visual C++
- Microsoftr 365 Solo 64bit
- MIT License
- (c) 2021 Z1000R
【C++】色を選択できるコンボボックス(ドロップダウンリスト)を作ってみた(MFC 未使用)
Twitter : @Z1000R_LR