c++代码
有一结构:typedef struct _SC_CONTEXT{
long hPort;
DWORD dwCardType;
BYTE params[24];
} SC_CONTEXT;
有一函数:SCREADER_API void WINAPI SCCard_InitContext(long hPort,DWORD dwCardType,SC_CONTEXT* hContext);使用了上述结构在c#中这样转:
结构: [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public struct SC_CONTEXT
{
[MarshalAs(UnmanagedType.I8)]
public long hPort;
[MarshalAs(UnmanagedType.U8)]
public ulong dwCardType;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 24)]
public byte[] Params; }
函数: [DllImport("screader.dll", EntryPoint = "SCCard_InitContext")]
public static extern void SCCard_InitContext(long port, long dwCardType, ref SC_CONTEXT m_Context);调用:ReaderDLL.SCCard_InitContext(ret,ReaderDLL.RFTYPE_ISO15693, ref m_Context1);
报错信息:尝试读取或写入受保护的内存。这通常指示其他内存已损坏。谁能帮小弟分析下原因啊,万分感谢哦!
有一结构:typedef struct _SC_CONTEXT{
long hPort;
DWORD dwCardType;
BYTE params[24];
} SC_CONTEXT;
有一函数:SCREADER_API void WINAPI SCCard_InitContext(long hPort,DWORD dwCardType,SC_CONTEXT* hContext);使用了上述结构在c#中这样转:
结构: [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public struct SC_CONTEXT
{
[MarshalAs(UnmanagedType.I8)]
public long hPort;
[MarshalAs(UnmanagedType.U8)]
public ulong dwCardType;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 24)]
public byte[] Params; }
函数: [DllImport("screader.dll", EntryPoint = "SCCard_InitContext")]
public static extern void SCCard_InitContext(long port, long dwCardType, ref SC_CONTEXT m_Context);调用:ReaderDLL.SCCard_InitContext(ret,ReaderDLL.RFTYPE_ISO15693, ref m_Context1);
报错信息:尝试读取或写入受保护的内存。这通常指示其他内存已损坏。谁能帮小弟分析下原因啊,万分感谢哦!
解决方案 »
- C# 清理串口返回数据缓冲区数据问题(急!)
- mvc3中一个view可以绑定两个模型吗???
- 那位高手帮我解释一下,下面这段代码是什么意图?
- 请问用vs2005升成安装包,怎么可以在一台电脑安装多次,不提示已经安装。
- 基本问题
- 报表中的统计问题(用的C#-ActiveReport)
- .Net Remoting一个小程序 怎么运行不起来了 !!! 帮忙啊!!! 谢谢啊!!!
- 如何得到农历日期????
- 求助。怎么计算从复出现的问题!
- 在form中画曲线图,有没有什么好的建议
- 有个对象object A,是动态获得的类,要调用方法、成员和属性都不难(Gettype().GetXXX),可是要调用它的索引怎么办?(当然不能用A[X])
- 字符串转换?????
m_Context1=new ReaderDLL.SC_CONTEXT();
结构: [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
unsafe public struct SC_CONTEXT
{
public long hPort;
public ulong dwCardType;
fixed public byte Params[24]; }
函数: [DllImport("screader.dll", EntryPoint = "SCCard_InitContext")]
unsafe public static extern void SCCard_InitContext(long port, long dwCardType, SC_CONTEXT* m_Context);
报错:Pointers and fixed size buffers may only be used in an unsafe context
DWORD dwCardType;
这两个都是32位的C#的long是64位的。