如何使用FTD2XX_NET的OpenBy函数

时间:2013-05-08 08:45:05

标签: c# ftdi

我想列出所有COM端口,它们是FTDI控制器的虚拟端口。

为了支持这一点,我尝试使用官方.NET包装器(“FTD2XX_NET”)为官方FTDI库提供的方法GetDeviceListOpenBySerialNumber

List<string> listResult = new List<string>();

FTD2XX.FT_DEVICE_INFO_NODE[] arrInfoNodes =
    new FTD2XX.FT_DEVICE_INFO_NODE[intALotMoreThanExpectedInfoNodeCount];

FTD2XX fObject = createFtdiInstance();

foreach (FTD2XX.FT_DEVICE_INFO_NODE node in arrInfoNodes)
{
    if (node == null)
    {
        break;
    }
    else
    {
        if (fObject.OpenBySerialNumber(node.SerialNumber) ==
            Ftdi.FTD2XX.FT_STATUS.FT_OK)
        {
            fObject.GetCOMPort(out strPortName);
            listResult.Add(strPortName);
        }
    }
}

我现在的问题是:在对所有节点进行迭代后,必须拔掉ftdi设备并重新连接,直到我再次使用它们(使用任何软件)。

1 个答案:

答案 0 :(得分:0)

我需要做的就是(阅读我自己的帖子和)添加行

fObject.Close();

以下之后:

fObject.GetCOMPort(out strPortName);

所以完整的foreach循环如下所示:

foreach (FTD2XX.FT_DEVICE_INFO_NODE node in arrInfoNodes)
{
    if (node == null)
    {
        break;
    }
    else
    {
        if (fObject.OpenBySerialNumber(node.SerialNumber) ==
            Ftdi.FTD2XX.FT_STATUS.FT_OK)
        {
            fObject.GetCOMPort(out strPortName);
            fObject.Close();  // <<-- New Code here!
            listResult.Add(strPortName);
        }
    }
}