日期:2014-05-19  浏览次数:20921 次

DllImport紧急求救---在线等
各位大侠,帮小弟一个忙吧,着急呀,我现在作软件和硬件接口那呢,现在的困难是我们买了一个   IC卡读卡器,厂商给我们提供了一个   Dll库,一个文档,我现在要调用   Dll库中的一个函数,文档中是这样说明这个函数的

/*
功能:查询是否有卡在天线区
参数:nMode:查询方式   缺省可以置   0;系统自动以QUERY_ALL方式查询  
0x52   为QUERY_ALL;
0x26   为QUERY_IDLE
    pszData:接收数据缓冲,格式:第一个字节为状态  
                    其后的字节为卡类型   0x01   Mifare   Light   0x04   Mifare   Ultra   Light
                                                          0x08   Mifare   Standard   S50   0x10   Mifare   Plus   S70
                    后面两个字节为卡片的ATQ
                    后面的四个字节为查到的卡号
                    如果没有查到卡则只有状态位
返回:返回的数据长度,如果为0xFE、0xFF则表示通讯失败
*/
unsigned   char   WINAPI   QueryRFCard(HANDLE   handlePort,unsigned   char   nMode,unsigned   char   *pszData);

我在C#里声明这个函数的时候是这样写的

                ///   <summary>
                ///   功能:查询是否有卡在天线区
                ///   </summary>
                ///   <param   name= "handlePort "> HANDLE   handlePort   逻辑通道号 </param>
                ///   <param   name= "nMode "> unsigned   char   nMode:查询方式   缺省可以置   0;系统自动以QUERY_ALL方式查询   ::::0x52   为QUERY_ALL;0x26   为QUERY_IDLE </param>
                ///   <param   name= "pszData "> unsigned   char   *pszData:接收数据缓冲,格式:第一个字节为状态  
        ///             其后的字节为卡类型   0x01   Mifare   Light   0x04   Mifare   Ultra   Light
        ///                                                   0x08   Mifare   Standard   S50   0x10   Mifare   Plus   S70
      ///               后面两个字节为卡片的ATQ
      ///               后面的四个字节为查到的卡号
      ///               如果没有查到卡则只有状态位 </param>
                ///   <returns> 返回类型为unsigned   char     返回:   返回的数据长度,如果为0xFE、0xFF则表示通讯失败 </returns>
                [DllImport( "JzCard.dll "   ,EntryPoint= "QueryRFCard ",   CallingConvention=CallingConvention.Winapi)]
                public   static   extern   int   QueryRFCard(long   handlePort,   uint   nMode,   [MarshalAs(UnmanagedType.LPStr)]string   pszData);

结果运行的时候报这个错误

对   PInvoke