Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


929 / 76735 ←次へ | 前へ→

【81466】Re:APIの引数へVBAからnull 及び構造体を入れる方法
回答  core  - 20/8/23(日) 22:36 -

引用なし
パスワード
   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宣言が望ましいです。

0 hits

【81459】APIの引数へVBAからnull 及び構造体を入れる方法 作業者A 20/8/17(月) 12:19 質問[未読]
【81466】Re:APIの引数へVBAからnull 及び構造体を入... core 20/8/23(日) 22:36 回答[未読]

929 / 76735 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free