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

问题描述

调用时尝试读取或写入受保护的内存。这通常指示其他内存已损坏。不知道是什么情况,网上好多都是c++Long对应c#int,但是我已经转了还是没用,这代码一开始时可以用的,我重装了win7系统后就运行不了了。。。。求大神帮忙c++:extern"C"__declspec(dllexport)BOOL__stdcallTCR_OpenReader(longnPort){if(1==g_iProtocol){g_CardReader.CreateInterface("1.dll");}else{g_CardReader.CreateInterface("2.dll");}g_iCardType=0;memset(&g_ICCardInfo.T,0x0,sizeof(ICCARDTOLLINFO));memset(&g_ETCCardInfo,0x0,sizeof(ETCCARDINFO));returng_CardReader.OpenComm(nPort,9600);}

c#:[DllImport(@"D:TollSoftWEBTICCardReader.dll",EntryPoint="TCR_OpenReader",SetLastError=true,CallingConvention=CallingConvention.Cdecl)]publicexternstaticboolTCR_OpenReader(intlgPort);

未处理System.AccessViolationExceptionMessage=尝试读取或写入受保护的内存。这通常指示其他内存已损坏。Source=ZTP.ReadCardOCXStackTrace:在ZTP.ReadCardOCX.ReadCardCtl.TCR_OpenReader(Int32lgPort)在WindowsFormsApplication1.Form1.button1_Click(Objectsender,EventArgse)位置D:WorkSpacetollsoftWEBZTP.ServerZTPReadCardOCXWindowsFormsApplication1Form1.cs:行号25在System.Windows.Forms.Control.OnClick(EventArgse)在System.Windows.Forms.Button.OnClick(EventArgse)在System.Windows.Forms.Button.OnMouseUp(MouseEventArgsmevent)在System.Windows.Forms.Control.WmMouseUp(Message&m,MouseButtonsbutton,Int32clicks)在System.Windows.Forms.Control.WndProc(Message&m)在System.Windows.Forms.ButtonBase.WndProc(Message&m)在System.Windows.Forms.Button.WndProc(Message&m)在System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message&m)在System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message&m)在System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtrhWnd,Int32msg,IntPtrwparam,IntPtrlparam)在System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG&msg)在System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtrdwComponentID,Int32reason,Int32pvLoopData)在System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32reason,ApplicationContextcontext)在System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32reason,ApplicationContextcontext)在System.Windows.Forms.Application.Run(FormmainForm)在WindowsFormsApplication1.Program.Main()位置D:WorkSpacetollsoftWEBZTP.ServerZTPReadCardOCXWindowsFormsApplication1Program.cs:行号18在System.AppDomain._nExecuteAssembly(RuntimeAssemblyassembly,String[]args)在System.AppDomain.ExecuteAssembly(StringassemblyFile,EvidenceassemblySecurity,String[]args)在Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()在System.Threading.ThreadHelper.ThreadStart_Context(Objectstate)在System.Threading.ExecutionContext.Run(ExecutionContextexecutionContext,ContextCallbackcallback,Objectstate,BooleanignoreSyncCtx)在System.Threading.ExecutionContext.Run(ExecutionContextexecutionContext,ContextCallbackcallback,Objectstate)在System.Threading.ThreadHelper.ThreadStart()InnerException:

解决方案

解决方案二:
extern"C"__declspec(dllexport)BOOL__stdcallTCR_OpenReader(longnPort)与[DllImport(@"D:TollSoftWEBTICCardReader.dll",CallingConvention=CallingConvention.Cdecl)]不一致
解决方案三:
引用1楼Forty2的回复:

extern"C"__declspec(dllexport)BOOL__stdcallTCR_OpenReader(longnPort)与[DllImport(@"D:TollSoftWEBTICCardReader.dll",CallingConvention=CallingConvention.Cdecl)]不一致

那是不是改成CallingConvention.StdCall,还是没有用呢
解决方案四:
顶一下,有没有大神来看看我的问题啊,
解决方案五:
1.dll.2.dll文件存在嘛?
解决方案六:
先排查下地址是否有效,异常提示很明显,这种情况在C还是C#中多是内存地址无效造成写入读取时候不想正常寻址,出现的内存访问违规
解决方案七:
引用4楼zanfeng的回复:

1.dll.2.dll文件存在嘛?

2.dll跟那个dll在一个文件夹下

时间: 2025-01-02 16:14:12

c#调c++dll,尝试读取或写入受保护的内存。这通常指示其他内存已损坏。的相关文章

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

问题描述 调用一个自己写的c++的dll,结果出现问题提示如下:"System.AccessViolationException"类型的未经处理的异常出现在BidingSystem_Client.exe中.其他信息:尝试读取或写入受保护的内存.这通常指示其他内存已损坏.--------------------------------------------c#[DllImport("PEKS.dll",CharSet=CharSet.Ansi,CallingConv

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

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

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

问题描述 求助各位大神!我最近在用C#封装一个C写的dll,在调dll中的方法时,时不时会报"尝试读取或写入受保护的内存.这通常指示其他内存已损坏".出现这样的问题,重启下机器就会好了,不过这也不是解决方案,继续大神帮我看看,如何才能杜绝这个问题.char*__readPeopleInfo_json()这个是C写的dll中的方法定义下面是C#引用及调用的代码[DllImport("HealthyCarder.dll")]publicstaticexternIntPt

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++ dll是出现这样的错误“尝试读取或写入受保护的内存。这通常指示其他内存已损坏。

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

求助,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#调用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++原型函数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#调用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 User