我正在使用一个名为ExecCommand()的函数的DLL文件。 C ++标题很好地将此函数定义为:
_NFC_EXPORT_ ResponseMsg * WINAPI ExecCommand(Commands pCmd, ...);
返回值是一个结构,在头文件中也定义为:
typedef struct _ResponseMsg
{
int status;
int length;
BYTE data[APDU_LEN];
BOOL statuswords;
BYTE sw1;
BYTE sw2;
TCHAR errorMsg[MAX_PATH];
} ResponseMsg;
参数“Commands pCmd”是一个枚举。
我尝试使用PInvoke在c#程序中访问此函数:
[DllImport("\\Windows\\NFC_DLL.dll", EntryPoint = "ExecCommand")]
[return: MarshalAs(UnmanagedType.LPStruct)]
public static extern ResponseMsg ExecCommand(
Commands pCmd,
params byte[] pParam
);
我将ResponseMsg定义为:
[StructLayout(LayoutKind.Sequential), Serializable]
public struct ResponseMsg
{
public int status;
public int length;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 255)]
public byte[] data;
public bool statuswords;
public byte sw1;
public byte sw2;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 100)]
public string errorMsg;
}
在执行期间,我不断收到NotSupportedException错误。你能发现我的c#代码中的错误吗?请指教。谢谢。