|
VBAでのポインター操作は制約が多いので、API宣言を下記のようにしてください。
Private Declare PtrSafe Function _
SetupDiGetDeviceInterfaceDetail Lib "SetupAPI.dll" _
Alias "SetupDiGetDeviceInterfaceDetailA" ( _
ByVal DeviceInfoSet As LongPtr, _
ByVal pDeviceInterfaceData As LongPtr, _
Optional ByVal pDeviceInterfaceDetailData As LongPtr, _
Optional ByVal DeviceInterfaceDetailDataSize As Long, _
Optional ByVal pRequiredSize As LongPtr, _
Optional ByVal pDeviceInfoData As LongPtr) As Long
使用はこんな風になります。
dim sz as long, hr as long
dim data as SP_DEVICE_INTERFACE_DATA
'// 必要bufferサイズ取得
hr = SetupDiGetDeviceInterfaceDetail(hDev, VarPtr(data), , , VarPtr(sz))
' :
'// メモリ確保: ptr
' :
'// SP_DEVICE_INTERFACE_DETAIL_DATA中身取得
hr = SetupDiGetDeviceInterfaceDetail(hDev, VarPtr(data), ptr, sz)
※無駄なANSI-Unicode文字列変換が行われるので、
Ansi系API宣言は避けるべきです。xxxW系のAPI宣言が望ましいです。
|
|