Excel VBA質問箱 IV

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

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


936 / 76735 ←次へ | 前へ→

【81459】APIの引数へVBAからnull 及び構造体を入れる方法
質問  作業者A  - 20/8/17(月) 12:19 -

引用なし
パスワード
   win64APIの引数へVBAからnull 及び構造体を入れる方法を教えてください。

win64APIのSetupDiGetDeviceInterfaceDetail第3引数はNullと構造体で機能が違います。
VBAからこの第3引数へnull または構造体を入れる方法を教えてください。

Private Declare PtrSafe Function SetupDiGetDeviceInterfaceDetail Lib "setupapi.dll" _
  Alias "SetupDiGetDeviceInterfaceDetailA" ( _
  ByVal DeviceInfoSet As LongPtr, _
  ByRef DeviceInterfaceData As SP_DEVICE_INTERFACE_DATA, _
  ByRef DeviceInterfaceDetailData As SP_DEVICE_INTERFACE_DETAIL_DATA, _ ←第3引数
  ByVal DeviceInterfaceDetailDataSize As Long, _
  ByRef RequiredSize As Long, _
  ByVal DeviceInfoData As String _  ←Null固定なのでstring宣言でVbnullstringを入れる
) As Boolean

C#ならばintptr.zeroを使いますが,VBAはvbnullstringを使うために第3因数を文字列にしなければなりません。
ByVal DeviceInterfaceDetailData As String, _ ←第3引数
これでvbnullstringを入れると機能は動作します。
すると次に構造体を引き渡す方法がわかりません。

仮に構造体宣言のままで DeviceInterfaceDetailDataへ構造体を引き渡すと必ず以下のエラーが返ってきます。
「ERROR_INVALID_USER_BUFFER 1784 0x6F8 要求された操作に対して与えられたバッファーが無効です。」

試しに
Call ZeroMemory(sDeviceInterfaceDetailData, 8)で構造体を初期化してみましたが同じエラーでした。

このようなAPIの引数渡し方法をお教えください。

0 hits

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

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