C#から関数を呼び出すには、関数を呼び出せません。関数からDokumentationある :C++のDLLから関数を呼び出す#
ボイドWINAPIのEnumerateHidDevices(PVOID pContext、ENUM_HID_PROCコールバック)。
機能説明: システム内のすべてのEETI PCAP HIDタッチデバイスを列挙します。
パラメータ:
pContext:用意したメモリを呼び出し側にポインタポイント。このアドレスはコールバックルーチンに渡されます。
コールバック:コールバックはコールバックルーチンを準備しました。このコールバックルーチンは、APIがPCAPタッチデバイスを列挙するたびに呼び出されます。
ENUM_HID_PROC:デバイス列挙コールバックルーチンのプロトタイプ。
typedef BOOL(WINAPI * ENUM_HID_PROC)(PVOID pContext、LPCTSTR szSymbolicName、LPCTSTR szProduct、ULONG ulInLength、ULONG ulOutLength);
pContext:コールバックルーチン用の呼び出し側準備バッファへのポインタ。
szSymbolicName:デバイス記号のリンクデバイスの列挙子の名前を列挙します。この文字列は、OpenHIDDeviceでデバイスを開くために使用する必要があります。
szProduct:ulInLength
製品名を指定します:バイト単位で入力レポートの最大サイズ。 OpenHIDDeviceを使用してデバイスを開くには、このパラメータを使用する必要があります。
ulOutLength: 出力レポートの最大サイズ(バイト単位)。 OpenHIDDeviceを使用してデバイスを開くには、このパラメータを使用する必要があります。
そして、その
方法をC#で、現時点でその表情:public HID_DEVICE_INFO m_HIDDevInfo = new HID_DEVICE_INFO();
public struct HID_DEVICE_INFO
{
public string strDeviceName;
public uint m_ulInLength;
public uint m_ulOutLength;
public ushort m_VID;
public ushort m_PID;
}
public delegate int ENUM_HID_PROC(object pContext, string szSymbolicName, string szProduct, uint ulInLength, uint ulOutLength);
[DllImport("HIDdAPI.dll")]
public static extern void EnumerateHidDevices(object pContext, ENUM_HID_PROC Callback);
public MainView1()
{
InitializeComponent();
EnumerateHidDevices(m_HIDDevInfo, EnumUsbHidCallback);
}
public static int EnumUsbHidCallback(object pContext, string szDeviceName, string szProduct, uint ulInLength, uint ulOutLength)
{
HID_DEVICE_INFO pInfo = (HID_DEVICE_INFO)pContext;
pInfo.strDeviceName = szDeviceName;
Console.Write("\r\n");
Console.Write("Enumerate EETI HID Device: {0}\r\n", pInfo.strDeviceName);
Console.Write("\r\n");
pInfo.m_ulInLength = ulInLength;
pInfo.m_ulOutLength = ulOutLength;
return 1;
}
これはEnumerateHidDevices(m_HIDDevInfo、EnumUsbHidCallback)でArgumentExceptionがで終わる:
発生System.ArgumentExceptionの
HResult = -2147024809
メッセージ=値が予想される範囲内にありません。 = mscorlib
のStackTrace
出典:システムで 。StubHelpers.ObjectMarshaler.ConvertToNative(オブジェクトobjSrc、のIntPtr pDstVariant) のInnerException:
問題がありますか?
ありがとうございました。
デフォルト値をチェックすることもできます。 –
こんにちはジャック、私はデフォルト値を追加しましたが、EnumerateHidDevices(m_HIDDevInfo、EnumUsbHidCallback)でも同じArgumentExceptionがあります。 –
呼び出し規約を設定していません –