vb6:如何在连接到智能卡时包含定义的 .dll

Posted

技术标签:

【中文标题】vb6:如何在连接到智能卡时包含定义的 .dll【英文标题】:vb6 : How to include defined .dll while connecting to smart card 【发布时间】:2013-11-04 03:59:29 【问题描述】:

我从智能卡读卡器提供商那里获得了这个示例代码。

retCode = SCardConnect(hContext, _
                    cbReader.Text, _
                    SCARD_SHARE_EXCLUSIVE, _
                    SCARD_PROTOCOL_T0 Or SCARD_PROTOCOL_T1, _
                    hCard, _
                    Protocol)

它的作用是连接到智能卡。SCardConnect 的函数声明如下:

Public Declare Function SCardConnect Lib "Winscard.dll" Alias "SCardConnectA" (ByVal hContext As Long, _
                                                                           ByVal szReaderName As String, _
                                                                           ByVal dwShareMode As Long, _
                                                                           ByVal dwPrefProtocol As Long, _
                                                                           ByRef hCard As Long, _
                                                                           ByRef ActiveProtocol As Long) As Long

我还有另一个 .dll 功能,我希望在连接到智能卡时将其包含在其中。

Declare Function MineKad Lib "mineKad.dll" (ByVal field As Long, ByVal buffer As Any, resultLength As Long) As Long

我试试这个:

retCode = SCardConnect(MineKad, _
                    hContext, _
                    cbReader.Text, _
                    SCARD_SHARE_EXCLUSIVE, _
                    SCARD_PROTOCOL_T0 Or SCARD_PROTOCOL_T1, _
                    hCard, _
                    Protocol)

但是失败了... 那么如何在连接到智能卡的同时连接 MineKad...MineKad 是 SDK,我需要包含它才能读取插入的卡。

【问题讨论】:

只是想和你核实一下。我过去在使用旧设备的 SDK 时遇到的问题之一是它们假定为 32 位,并且无法在 64 位环境中工作。您需要确保您拥有的 SDK 支持您正在运行的平台。还要检查 Windows 日志。 哇。从来没想过。现在检查一下。 您的示例调用似乎只是在前面添加了另一个参数——这可能是行不通的。 @MiG 你能提供原始的 C 头文件吗?除非你这样做,否则它会一直在猜谜游戏。 【参考方案1】:

注意SCardConnectA有6个参数:

ByVal hContext As Long, _
ByVal szReaderName As String, _
ByVal dwShareMode As Long, _
ByVal dwPrefProtocol As Long, _
ByRef hCard As Long, _
ByRef ActiveProtocol As Long

在这里你通过了 7:

retCode = SCardConnect(MineKad, _
                    hContext, _
                    cbReader.Text, _
                    SCARD_SHARE_EXCLUSIVE, _
                    SCARD_PROTOCOL_T0 Or SCARD_PROTOCOL_T1, _
                    hCard, _
                    Protocol)

这是否可行?

retCode = SCardConnect(hContext, _
                    cbReader.Text, _
                    SCARD_SHARE_EXCLUSIVE, _
                    SCARD_PROTOCOL_T0 Or SCARD_PROTOCOL_T1, _
                    hCard, _
                    Protocol)

【讨论】:

以上是关于vb6:如何在连接到智能卡时包含定义的 .dll的主要内容,如果未能解决你的问题,请参考以下文章

CN3 条码阅读器和成像器在连接到互联网时出现故障

如何在vb6中注册一个不能用作com互操作的.net DLL?

如何在连接到 mLab 的 GraphQL 中为“更新”数据编写 Mutation

如何在连接到节点上的 websocket 服务器时传递消息

如何在连接到 USB 时启动我的应用程序?

在VB6中编译DLL时“加载DLL时出错”