簡體   English   中英

C#致命執行引擎錯誤調用動態加載的.dll

[英]C# Fatal Execution Engine Error calling dynamically loaded .dll

我幾周前開始用C#編程(主要來自Java),而我目前正努力使用libMPSSE.dll庫。

這是我導入功能的方式:

        [DllImportAttribute("libMPSSE.dll", EntryPoint = "I2C_GetNumChannels", CallingConvention = CallingConvention.Cdecl)]
    public static extern uint I2C_GetNumChannels(ref uint NumChannels);

    [DllImportAttribute("libMPSSE.dll", EntryPoint = "I2C_OpenChannel", CallingConvention = CallingConvention.Cdecl)]
    public static extern uint I2C_OpenChannel(uint index, ref IntPtr handler);

    [DllImportAttribute("libMPSSE.dll", EntryPoint = "I2C_GetChannelInfo", CallingConvention = CallingConvention.Cdecl)]
    private static extern uint I2C_GetChannelInfo(uint index, ref FT_DEVICE_LIST_INFO_NODE chanInfo); 

這就是.dll中的C ++頭文件:

FTDI_API FT_STATUS I2C_GetNumChannels(uint32 *numChannels);
FTDI_API FT_STATUS I2C_GetChannelInfo(uint32 index, FT_DEVICE_LIST_INFO_NODE *chanInfo);
FTDI_API FT_STATUS I2C_OpenChannel(uint32 index, FT_HANDLE *handle);

前兩個運行正常,但是如果我調用第三個,則會出現FatalExecutionEngineError:

       for (uint i = ch; i >= 0; i--) { //ch contains number of chans available

            FT_DEVICE_LIST_INFO_NODE nodeInfo = new FT_DEVICE_LIST_INFO_NODE();

            I2C_GetChannelInfo(i, ref nodeInfo); // crash here
            Console.WriteLine(" > info: "+nodeInfo.Description);

            }
        } 

我猜想崩潰是由FT_DEVICE_LIST_INFO_NODE參數引起的,在我的代碼中看起來像這樣:

    public class FT_DEVICE_LIST_INFO_NODE
    {
        public UInt32 Flags;
        public FTDI.FT_DEVICE Type;
        public UInt32 ID;
        public UInt32 LocId;

        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]
        public string SerialNumber;

        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)]
        public string Description;

        public IntPtr ftHandle;
    }

根據.dll文檔,在c ++代碼中如下所示:

typedef struct _ft_device_list_info_node {
    DWORD Flags;
    DWORD Type;
    DWORD ID;
    DWORD LocId;
    char SerialNumber[16];
    char Description[64];
    FT_HANDLE ftHandle;
} FT_DEVICE_LIST_INFO_NODE;

我現在有點迷路,只是嘗試並出錯而又不真正知道如何解決此問題,這當然對我沒有幫助,這是我第一次使用不受管理的.dll:D

可以在http://www.ftdichip.com/Support/SoftwareExamples/MPSSE/LibMPSSE-I2C.htm中找到該庫,並在此處找到文檔http://www.ftdichip.com/Support/Documents/AppNotes/AN_177_User_Guide_For_LibMPSSE-I2C .pdf

提前致謝

/ edit:我忘記了FT_DEVICE枚舉

        public enum FT_DEVICE
    {
        /// <summary>
        /// FT232B or FT245B device
        /// </summary>
        FT_DEVICE_BM = 0,
        /// <summary>
        /// FT8U232AM or FT8U245AM device
        /// </summary>
        FT_DEVICE_AM,
        /// <summary>
        /// FT8U100AX device
        /// </summary>
        FT_DEVICE_100AX,
        /// <summary>
        /// Unknown device
        /// </summary>
        FT_DEVICE_UNKNOWN,
        /// <summary>
        /// FT2232 device
        /// </summary>
        FT_DEVICE_2232,
        /// <summary>
        /// FT232R or FT245R device
        /// </summary>
        FT_DEVICE_232R,
        /// <summary>
        /// FT2232H device
        /// </summary>
        FT_DEVICE_2232H,
        /// <summary>
        /// FT4232H device
        /// </summary>
        FT_DEVICE_4232H,
        /// <summary>
        /// FT232H device
        /// </summary>
        FT_DEVICE_232H,
        /// <summary>
        /// FT232X device
        /// </summary>
        FT_DEVICE_X_SERIES
    };

謝謝大家,我現在開始運行它。 我用FT_DEVICE_LIST_INFO_NODE制作了一個結構,並添加了LayoutKind.Sequential和CharSet.Ansi屬性。 我也將FTDI.FT_DEVICE更改為一個簡單的uint以進行測試,它似乎現在可以運行。

    [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
    public struct FT_DEVICE_LIST_INFO_NODE
    {


        public uint Flags;
        public uint Type;
        public uint ID;
        public uint LocId;

        /// char[16]
        [MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst = 16)]
        public string SerialNumber;

        /// char[64]
        [MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst = 64)]
        public string Description;
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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