SCardResourceManager Listreader导致Index超出了数组错误的界限

时间:2015-03-27 06:46:51

标签: c#

目标:我需要使用HID Omnikey智能卡读卡器获取HID智能卡的UID(唯一ID)。不幸的是,我无法弄清楚如何使用PCSC(pcsc-sharp.dll)来做到这一点。因此,我寻找替代方案,我找到了cardwerk。

我是.NET的新手,我正在测试智能卡示例代码,我找到了智能卡dll的评估版。

ArrayList m_vsReaderNames = new ArrayList();

private void InitializeSmartCardSystem()
        {
            if (m_aCardResourceManager == null)
            {
                m_aCardResourceManager = new SCardResourceManager();
                if (!m_aCardResourceManager.EstablishContext(SCardContextScope.User))
                {
                    MessageBox.Show("SCardResourceManager.EstablishContext failed!");
                    Application.Exit();
                }

                m_aCardResourceManager.ListReaders(m_vsReaderNames);
                if (m_vsReaderNames.Count == 0)
                {
                    MessageBox.Show("SCardResourceManager.ListReaders did not find any card readers!");
                    Application.Exit();
                }
            }
        }

这个m_aCardResourceManager.ListReaders(m_vsReaderNames); part检索以下智能卡信息。

    [0] "H" object {string}
    [1] "I" object {string}
    [2] "D" object {string}
    [3] " " object {string}
    [4] "O" object {string}
    [5] "M" object {string}
    [6] "N" object {string}
    [7] "I" object {string}
    [8] "K" object {string}
    [9] "E" object {string}
    [10]"Y" object {string}
    [11]" " object {string}
    [12]"5" object {string}

由于上面代码中的m_vsReaderNames变量中没有indexID,我遇到一个错误,指出Index超出了数组的范围。

此外,我不想使用arraylist值,而是希望字符串值等于“HID OMNIKEY 5”,它将显示在附件上显示的组合框中。!

有关完整的示例代码,请参阅http://smartcard-api.com/download.shtml

1 个答案:

答案 0 :(得分:0)

我不完全确定你在问什么。听起来你想将这些值加入一个字符串?这是你可以做到的一种方式。

var myString = string.Join("", m_vsReaderNames);
//myString now holds: "HID OMNIKEY 5"