[英]Call a function in a c++ dll from c#
我想從C#中調用c ++ dll中的函數,但是我無法正常工作。 那就是來自功能的文件:
VOID 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:位於System.StubHelpers.ObjectMarshaler.ConvertToNative(Object objSrc,IntPtr pDstVariant)InnerException:
問題出在哪兒 ?
謝謝你的幫助。
恕我直言,您的代碼不安全。 我看不到您將對象固定在摘要中的任何位置。 我相信正確的方法是將IntPtr
傳遞給該方法,並通過Marshal.StructureToPtr
獲取指向struct
的指針。
您可能還需要檢查此問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.