dll结构体-C#调用DLL结构体,第一次成功,第二次的时候就报错。尝试读取或写入受保护的内存。

问题描述

C#调用DLL结构体,第一次成功,第二次的时候就报错。尝试读取或写入受保护的内存。

C++代码
typedef struct tagIDCardData{
char Name[32]; //姓名

char Sex[6]; //性别
char Nation[20]; //名族
char Born[18]; //出生日期
char Address[72]; //住址
char IDCardNo[38]; //身份证号
char GrantDept[32]; //发证机关
char UserLifeBegin[18]; // 有效开始日期
char UserLifeEnd[18]; // 有效截止日期
char reserved[38]; // 保留
char PhotoFileName[255];// 照片路径
}IDCardData;
int _stdcall Syn_ReadMsg( int iPort,int iIfOpen,IDCardData *pIDCardData );

C#代码
[StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
public struct IDCardData

{

[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]

public string Name; //姓名

[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 6)]

public string Sex; //性别

[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]

public string Nation; //名族

[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 18)]

public string Born; //出生日期

[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 72)]

public string Address; //住址

[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 38)]

public string IDCardNo; //身份证号

[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]

public string GrantDept; //发证机关

[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 18)]
public string UserLifeBegin; // 有效开始日期

[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 18)]
public string UserLifeEnd; // 有效截止日期

[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 38)]
public string reserved; // 保留

[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 255)]
public string PhotoFileName; // 照片路径

}

[DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_ReadMsg", CharSet = CharSet.Ansi)]

public static extern int Syn_ReadMsg(int iPortID, int iIfOpen, ref IDCardData pIDCardData);
应用代码
public int nRet=0;pulblic int nPort=1001;private void ListenCard()

{

try

{

while (!_bListenCardQuit)

{

IDCardData CardMsg = new IDCardData();
nRet = Syn_ReadMsg(nPort, 0, ref CardMsg);//读取信息
GC.Collect(2, GCCollectionMode.Optimized);

Thread.Sleep(500);
}
_bQuitListenCardDone = true;
#region 异常

catch (Exception eE)

{

}

#endregion

}
运行到这里( nRet = Syn_ReadMsg(nPort, 0, ref CardMsg);//读取信息),第一次成功,运行第二次的时候就报错:出现尝试读取或写入受保护的内存。这通常指示其他内存已损坏!
恳请各位大牛帮忙解决一下问题啊!

解决方案

尝试一下吧文件设置为可读写状态

时间: 2024-10-30 04:20:57

dll结构体-C#调用DLL结构体,第一次成功,第二次的时候就报错。尝试读取或写入受保护的内存。的相关文章

asp.net调用C++的Dll,报这样的错“尝试读取或写入受保护的内存。这通常指示其他内存已损坏”

问题描述 publicclassmsdid{[DllImport(@"E:ddaSoftEncryptDllDebugSoftEncryptDll.dll",EntryPoint="GetHardDiskSN",CharSet=CharSet.Auto,CallingConvention=CallingConvention.StdCall)]publicstaticexternStringBuilderGetHardDiskSN();}//引用DLLprotecte

c#调用c++dll报错:尝试读取或写入受保护的内存。这通常指示其他内存已损坏。

问题描述 c++原型函数boolDetBelt(constchar*chImgFile,doubledStrictDegree=1.0,XSCRECTroiRect=XSCRECT(),constchar*dstFile=NULL);structXSCRECT{intx;inty;intheight;intwidth;XSCRECT(){x=0;y=0;height=0;width=0;}};声明c#代码[StructLayoutAttribute(LayoutKind.Sequential)]

dll c#-c#调用c++的dll出现尝试读取或写入受保护的内存问题

问题描述 c#调用c++的dll出现尝试读取或写入受保护的内存问题 使用c#调用c++的一个dll.c++的接口函数为: extern "C" __declspec(dllexport)bool __stdcall CreateDetmObject(IDetManager **ppDetManager); 参数IDetManager为一个结构体: struct IDetManager { virtual void __stdcall SetListener(HWND hWnd) = 0

C++的结构体转换为C#的,尝试读取或写入受保护的内存。这通常指示其他内存已损坏

问题描述 各位大神们,我在C#中调用c++的dll提供的接口函数,函数中需要传递一个结构体dll中的函数接口是:ReadTag(HANDLEhHandle,REC_INFO&data);其中REC_INFO是一个结构体structREC_INFO{BYTEInfoType;union{//收集标签返回struct{BYTETagID[8];//BYTETagState;struct{BYTETagPower:2;BYTETagSensor:1;BYTETagInitialization:1;BY

读取PLC中的结构体时,总是提示:尝试读取或写入受保护的内存。这通常指示其他内存已损坏

问题描述 读取PLC中的结构体时,总是提示:尝试读取或写入受保护的内存.这通常指示其他内存已损坏,但是,我把string[]改成char[]时,可以读到300个单字符,是数据类型的问题么?usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Wi

求助,C#调用C++dll时提示:尝试读取或写入受保护的内存。这通常指示其他内存已损坏。

问题描述 C++dll的头文件接口描述如下:#pragmapack(push,1)typedefstructXCtrlStatus{XCtrlStatus(unsignedlongV=0){*reinterpret_cast<unsignedlong*>(this)=V;}unsignedcharERR:1;unsignedcharAUTO:1;unsignedcharRUN:2;unsignedcharDIR:2;unsignedchar:1;unsignedchar:1;unsignedc

c++-C# 调用C++ dll是出现这样的错误“尝试读取或写入受保护的内存。这通常指示其他内存已损坏。

问题描述 C# 调用C++ dll是出现这样的错误"尝试读取或写入受保护的内存.这通常指示其他内存已损坏. 调试时是这样的: SDK上是这样说明的: 我调用这个dll时是这样的: 困扰了很久,希望有大神来看一看,感激不敬 解决方案 C#尝试读取或写入受保护的内存.这通常指示其他内存已损坏.C# 尝试读取或写入受保护的内存 .这通常指示其他内存已损坏.C#尝试读取或写入受保护的内存.这通常指示其他内存已损坏. 解决方案二: 先看是不是你的参数有问题,然后就是数据对不对 解决方案三: 是不是重复调用

c#调用delphi编写的dll文件报错,尝试读取或写入受保护的内存

问题描述 c#调用delphi编写的dll文件报错,尝试读取或写入受保护的内存 delphi函数原型 Procedure invoke(params :PChar; result : PChar) ; 解决方案 把这个delphi的原型改一下,改为 Function Pchar invoke(params :PChar) ; 再试试 解决方案二: Function invoke(params: PAnsiChar): PAnsiChar ;

C# 调用C++的DLL文件出现问题。尝试读取或写入受保护的内存。这通常指示其他内存已损坏。

问题描述 我用C#开发一个项目,需要饮用C++的DLL,但是调用其中的方法是有几个函数正常,有一些方法总是报错.错误为:"尝试读取或写入受保护的内存.这通常指示其他内存已损坏."哪位大神可以帮我看看.这是DLL中的方法:typedefstructehInformation{std::stringehfilename;std::stringmark;//eh头文件的标示std::stringsendAddr;//eh头文件的发送地址std::vector<std::string&g