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