【发布时间】:2012-08-10 12:17:59
【问题描述】:
如何跳过 C# 中的可选参数 (pioRecvPci)? 我认为主要问题是在 C 中参数是一个指针,因此可以提供 NULL 而在 C# 中使用结构上的 ref 关键字,根据定义不能为空。
C 代码
typedef struct {
DWORD dwProtocol;
DWORD cbPciLength;
} SCARD_IO_REQUEST;
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
);
C# 代码
[StructLayout(LayoutKind.Sequential)]
public struct SCARD_IO_REQUEST
{
public int dwProtocol;
public int cbPciLength;
}
[DllImport("winscard.dll")]
public static extern int SCardTransmit(
int hCard,
ref SCARD_IO_REQUEST pioSendRequest,
ref byte SendBuff,
int SendBuffLen,
ref SCARD_IO_REQUEST pioRecvRequest,
ref byte RecvBuff,
ref int RecvBuffLen);
【问题讨论】:
-
您可以使用
class代替(我隐约记得很久很久以前就成功使用过这种方法)。或者,将参数声明为SCARD_IO_REQUEST?可能会起作用,但这只是一个疯狂的猜测。