首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WCF的Winscard Dll

WCF的Winscard Dll
EN

Stack Overflow用户
提问于 2012-10-31 06:13:57
回答 1查看 3.4K关注 0票数 0

我的项目结构

代码语言:javascript
复制
 myApp 
  -->WCFSerLibrary 
  -->ClassLib1
  -->ClassLib2  // This one uses winscard.dll 

我想和一个附加智能卡的收割机沟通。

我遵循的四个步骤是

  1. SCardEstablishContext
  2. 通过SCardListReaders获取读取器名称
  3. SCardConnect
  4. 用SCardTransmit读取

前三个步骤成功地执行,但是当我尝试执行SCardTransmit时,它会返回87的响应代码。

第二方面,上面提到的场景是当我从WCF服务调用它时。现在,我在Windows应用程序中使用相同的ClassLib2,它正确地进行通信。

代码语言:javascript
复制
 retCode =  ModWinsCard.SCardTransmit(hCard, ref pioSendRequest, ref SendBuff[0], sendLen, ref pioSendRequest, ref RecvBuff[0], ref recvLen);

像在ModWinsCard类中一样

代码语言:javascript
复制
   [DllImport("winscard.dll"l)]
    public static extern Int64 SCardTransmit(UInt64 hCard, ref SCARD_IO_REQUEST pioSendRequest, ref byte SendBuff, int SendBuffLen, ref SCARD_IO_REQUEST pioRecvRequest, ref byte RecvBuff, ref int RecvBuffLen);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-31 06:35:30

87是无效参数。该方法返回一个不太长的int。此外,您只传入输入和输出缓冲区中的第一项。卡句柄应使用IntPtr。

代码语言:javascript
复制
LONG WINAPI SCardTransmit(
  _In_         SCARDHANDLE hCard,
  _In_         LPCSCARD_IO_REQUEST pioSendPci,
  _In_         LPCBYTE pbSendBuffer,
  _In_         DWORD cbSendLength,
  _Inout_opt_  LPSCARD_IO_REQUEST pioRecvPci,
  _Out_        LPBYTE pbRecvBuffer,
  _Inout_      LPDWORD pcbRecvLength
);

可以试试下面的pinvoke签名吗?

代码语言:javascript
复制
[DllImport("winscard.dll"l)]
        public static extern int SCardTransmit(
            IntPtr hCard, 
            ref SCARD_IO_REQUEST pioSendRequest, 
            byte[] SendBuff, 
            int SendBuffLen, 
            ref SCARD_IO_REQUEST pioRecvRequest, 
            IntPtr RecvBuff,    // Copy with marshal.copy to a managed array after call.
            ref int RecvBuffLen);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13152226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档