簡體   English   中英

從C#調用C ++ DLL中的函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM