C函数我怎么能跳过C#中的可选参数(pioRecvPci)时,如何处理可选参数结构? 我认为主要问题是,在C中的参数是一个指针,以便能够一边在C#上的结构ref关键字使用可以不通过定义空供应NULL。调用从C#
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?”,但这只是一个疯狂的猜测。 – 2012-08-10 12:22:21