|
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の引数渡し方法をお教えください。
|
|