dll中的原结构是
typedef struct
{
UCHAR basicinfosec;//基础信息扇区
UCHAR publicexchangesec;//公共交换信息扇区
UCHAR WorkSec[13];//用于特定用途的扇区使用信息
} SEC_USED_INFO; //使用扇区信息
函数是
int GetLicInfo(LPSTR CommPassword,LPSTR UserPassword,UCHAR *SysCardNo,SEC_USED_INFO &sec_used_status)我在c#中是这样定义的
结构体
public struct SEC_USED_INFO
{
public Byte basicinfosec;//基础信息扇区
public Byte publicexchangesec;//公共交换信息扇区
public Byte[] WorkSec;//用于特定用途的扇区使用信息
}
函数
[DllImport("a.dll", EntryPoint = "GetInfo", CharSet = CharSet.Ansi)]
public static extern int GetInfo([MarshalAs(UnmanagedType.LPStr)] string CommPassword, [MarshalAs(UnmanagedType.LPStr)] out string UserPassword, out int SysCardNo, out SEC_USED_INFO sec_used_status);调试时,老是出现"尝试读取或写入受保护的内存,这通常指示其他内存已损坏";用断点调试看出此函数前两个参数没有返回值,后面两个参数有返回!
请高手指点一二,急死了!
typedef struct
{
UCHAR basicinfosec;//基础信息扇区
UCHAR publicexchangesec;//公共交换信息扇区
UCHAR WorkSec[13];//用于特定用途的扇区使用信息
} SEC_USED_INFO; //使用扇区信息
函数是
int GetLicInfo(LPSTR CommPassword,LPSTR UserPassword,UCHAR *SysCardNo,SEC_USED_INFO &sec_used_status)我在c#中是这样定义的
结构体
public struct SEC_USED_INFO
{
public Byte basicinfosec;//基础信息扇区
public Byte publicexchangesec;//公共交换信息扇区
public Byte[] WorkSec;//用于特定用途的扇区使用信息
}
函数
[DllImport("a.dll", EntryPoint = "GetInfo", CharSet = CharSet.Ansi)]
public static extern int GetInfo([MarshalAs(UnmanagedType.LPStr)] string CommPassword, [MarshalAs(UnmanagedType.LPStr)] out string UserPassword, out int SysCardNo, out SEC_USED_INFO sec_used_status);调试时,老是出现"尝试读取或写入受保护的内存,这通常指示其他内存已损坏";用断点调试看出此函数前两个参数没有返回值,后面两个参数有返回!
请高手指点一二,急死了!
解决方案 »
- 关于sqlserver2000里面创建新id及密码
- c#设置excel字体大小时速度很慢,需要等一两秒。
- 请问各位高手,不用new怎么改变Label的坐标?
- 数据库问题
- C#中使用ActiveX出错System.Runtime.InteropServices.COMException
- 求助DataGrid问题
- 求好用的vb.net 转 c#的工具
- 要求csdn改进论坛,支持的顶
- C# 窗体c→类b→窗体a→a的方法 应该如何设计
- 有一个5位数,如:00001 数字的增长率为1,00002、00003这样。 当他到99999的时候,就让他变成A0001、A0002、A0003,以此类推
- 有什么办法可以去掉这个窗口在任务栏上的图标呢?
- .net如何实现不同文件夹下页面的跳转
这里用marshal指定长度信息
public class SEC_USED_INFO
{
public Byte basicinfosec;//基础信息扇区
public Byte publicexchangesec;//公共交换信息扇区
[ MarshalAs( UnmanagedType.ByValArray, SizeConst=13 )] public Byte[] WorkSec;//用于特定用途的扇区使用信息
}
"运行库遇到了错误。此错误的地址为 0x79e812af,在线程 0xb00 上。错误代码为 0xc0000005。此错误可能是 CLR 中的 bug,或者是用户代码的不安全部分或不可验证部分中的 bug。此 bug 的常见来源包括用户对 COM-interop 或 PInvoke 的封送处理错误,这些错误可能会损坏堆栈"是不是这两个参数有问题
[MarshalAs(UnmanagedType.LPStr)] string CommPassword,
[MarshalAs(UnmanagedType.LPStr)] out string UserPassword
?
我转换错了?