c#调用c++ dll出现“尝试读取或写入受保护的内存” [问题点数:50分]

Bbs1
本版专家分:0
结帖率 0%
Bbs9
本版专家分:65933
版主
Blank
进士 2017年 总版技术专家分年内排行榜第四
2014年 总版技术专家分年内排行榜第四
2013年 总版技术专家分年内排行榜第四
2012年 总版技术专家分年内排行榜第六
Blank
金牌 2018年3月 总版技术专家分月排行榜第一
2013年5月 总版技术专家分月排行榜第一
Blank
银牌 2018年10月 总版技术专家分月排行榜第二
2018年9月 总版技术专家分月排行榜第二
2018年8月 总版技术专家分月排行榜第二
2018年4月 总版技术专家分月排行榜第二
2016年7月 总版技术专家分月排行榜第二
2016年3月 总版技术专家分月排行榜第二
2015年12月 总版技术专家分月排行榜第二
2014年8月 总版技术专家分月排行榜第二
2014年7月 总版技术专家分月排行榜第二
2013年6月 总版技术专家分月排行榜第二
Blank
优秀版主 2016年10月优秀大版主
2016年8月论坛优秀版主
优秀大版主
2015年7月优秀大版主
2015年8月优秀大版主
2015年8月优秀大版主
2015年9月优秀大版主
2015年5月优秀大版主
2015年4月优秀版主
2014年11月论坛优秀版主
Bbs9
本版专家分:56695
Bbs1
本版专家分:0
Bbs3
本版专家分:563
其他相关推荐
c#调用C++编译的dll时,报“出现尝试读取写入保护内存” 另类解决方案
出现尝试读取写入保护内存 dll c++ c# 调用
关于C#调用VC编的DLL后报“System.AccessViolationException:尝试读取写入保护内存
关于C#调用VC编的DLL后报“System.AccessViolationException:尝试读取写入保护内存 我的结
C# 尝试读取写入保护内存 。这通常指示其他内存已损坏。
在C#中调用别人的DLL的时候有时候出现 尝试读取写入保护内存 。这通常指示其他内存已损坏。 在传值的时候还是用指针,再在C#中做转换就好了。 解决办法: [DllImport("APPLISTCC.dll")] public static extern string TestFunc1(string param1); string ret1 = TestFunc1("
vb.net语言调用dll函数出现读取写入保护内存。这通常指示其他内存已损坏。”
这个问题我也纠结了很久,最终还是给我ko了!哈哈…… 解决方法: 在调用外面dll函数的时候,首先要在模块里面通过declear来声明函数的,另外还有结构体也需要声明。注意,每个数据的类型要跟dll说明文档里面的一致才行,切不可疏忽!结构体里面有数组的时候,在vb6.0下面是可以直接赋值大小的,但是在.net下面是不允许这样做的。要在结构体(其实是不能继承的类而已)里面声明构造函数,在外面用n
C#尝试读取写入保护内存。这通常指示其他内存已损坏。
今天打开一个之前写的程序,
C#:AccessViolationException: 尝试读取写入保护内存。这通常指示其他内存已损坏。解决办法收集
各种此类错误解决办法的收集:   1.http://www.cnblogs.com/hfzsjz/archive/2010/01/19/1651406.html  情景:C#调用C的dll出现这个提示   解决办法:将dll里函数需要返回的局部变量声明为static   2.http://zhidao.baidu.com/question/202392319.html 情景:处理
窗体控件的System.AccessViolationException: 尝试读取写入保护内存解决方案。
前段时间维护公司一个小程序时,在窗体添加自动下拉滚动条时,出了这个异常。System.AccessViolationException: 尝试读取写入保护内存解决方案。 static class Program { private static Form1 M_WinForm; /// /// 应用程序的主入口点。
我的异常-VS2012“System.AccessViolationException: 尝试读取写入保护内存。”
--无可用源 System.AccessViolationException: 尝试读取写入保护内存。 问了一下同组的人员,我们用的同样的源码,数据库也都是访问我的PC上的,但是其他人的可以正常访问。后来请教社河,试着把数据库连接字符串中的 IP地址,换成local,登录成功。现在问题可总结为:源码用IP访问本机数据库,源码报错;源码local访问数据库可正常运行。
fnthex32.dll尝试读取写入保护内存。这通常指示其他内存已损坏。
16年时候项目中也要用的斑马打印机打印中文汉字的要求,想借鉴这个控件(Fnthex32.dll)来完成,无奈都失败啦,后来是用C# 写成类给vb6.0调用把文本写在txtbox中,再生产图片,然后系列化解决的这个问题。 最近用c# 重写这个斑马打印程序,就又想起这个控件,于是就决定重新研究一下,网上的基本都是9个参数(报错:尝试读取写入保护内存。这通常指示其他内存已损坏。)。无奈怎么都不成
关于“尝试读取写入保护内存。这通常指示其他内存已损坏。”的解决
转载于:http://www.cnblogs.com/jerrmy/p/3485120.html 先来介绍一下出现这个错误的原因。看到园子中有人写了Web Api 2.0的博文,自己也想学习一下这个技术,于是就去了Microsoft官网看了一下关于web api的介绍,之后就有自己动手写个demo的冲动了,由于自己安装的是vs2012,需要升级到sp4,但是自己又不想升级到sp4,关键还是自
VS dll【C++创建DLL并用C#调用且同时实现对DLL的调试】【C#和dll之间传递数组】【System.AccessViolationException: 尝试读取写入保护内存。】
SYD8821是具有全球领先低功耗(RX 2.4mA @-94.5dBm灵敏度,TX 4.3mA @0dBm输出功率)的蓝牙低功耗SOC芯片,在极低电流下实现了优异的射频性能,搭配176kB SRAM,512kB flash,非常适合中高阶可穿戴、智能家居、物联网等低功耗应用。具体可咨询:http://www.syd-tek.com/   本文摘录于:https://blog.csdn.net...
C#异常 尝试读取写入保护内存。这通常指示其他内存已损坏
System.AccessViolationException: Attempted to read or writeprotected memory.  This is often an indication that other memory iscorrupt. 此类错误屡见不鲜了,特别是图像开发,Com组件操作时,不要期望本文能够给你一个明确的答复,只能给你提供解决问题的思路: 解决
C#调用C++编写的opencv DLL的时候遇见的问题
最近做一个图像处理的简单程序,使用C#做界面,调用Opencv编写的DLL进行视频处理,只是简单的找一些边界轮廓什么的,但中间遇到了很多问题,也是因为自己太菜,所以走了很多弯路,但目前为止都解决了,这里先记录一波,方便以后查看。 第一个问题是调用dll时候传参的问题,不同于一些普通参数,比如字符串或者数组什么的,图像的格式比较复杂,没有对应的数据结构可以当做参数传输,像C#中数组,可以在编写的C...
尝试读取写入保护内存.这通常指示其他内存已损坏的"">C# winform程序运行过程中提示"尝试读取写入保护内存.这通常指示其他内存已损坏的"
C# winform程序运行过程中提示"尝试读取写入保护内存.这通常指示其他内存已损坏的" 错误 
System.AccessViolationException: 尝试读取写入保护内存
依旧是开发Android平板客户端与C#pc端通讯时遇到的问题。 问题描述: 当平板连接电脑时,已经有其他便携设备插在电脑上,此时用户登录pc端,pc只能部分用户登录,其他用户会使得程序坏死,弹出的错误是: [Managed to Native Transition] mscorlib.dll!System.RuntimeTypeHandle.GetTypeByName(strin
ASP.NET中System.AccessViolationException: 尝试读取写入保护内存。这通常指示其他内存已损坏
System.AccessViolationException: 尝试读取写入保护内存。这通常指示其他内存已损坏 如题:遇到这个问题真的让人很着急!tiao'sh
尝试读取写入保护内存这通常指示其他内存已损坏"">程序出现异常"尝试读取写入保护内存这通常指示其他内存已损坏"
System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt. 此类错误屡见不鲜了,特别是图像开发,Com组件操作时,不要期望本文能够给你一个明确的答复,只能给你提供解决问题的思路:
C# emgucv 关于“尝试读取写入保护内存。这通常指示其他内存已损坏。” 解决办法
出现原因:Mat转换为Bitmap显示图像的同时,向richTextBox打印数据,就会报错。单独使用正常。 Mat outImg = new Mat(); //中间代码省略... pictureBox1.Image = outImg.Bitmap;//问题出在这 for (int i = 0; i < 32; i++) { for (int j = 0; j < 32...
尝试读取写入保护内存,这通常指示其他内存已损坏【解决方法】
今天本地运行项目,莫名其妙地报了个 尝试读取写入保护内存,这通常指示其他内存已损坏! 于是在网上找了好久,终于找到了解决的方法,自己做个笔记,方便以后在遇到类似的问题,可以很方便地找到解决办法 以管理员的身份运行CMD   执行netsh winsock reset    然后提示你重新启动计算机   重启后错误就没有了
运行后出错:尝试读取写入保护内存。这通常指示其他内存已损坏。 的解决方案
 前几天在做一个asp.net的项目(c#)。 在项目开发到一半的时候,vs2005中报了下面的错误。 尝试读取写入保护内存。这通常指示其他内存已损坏。 直接的影响就是没有办法生成网站或者生成解决方案。只要一调试程序就会自动关闭vs2005. 一下子头大了。 怎么办啊。开始上网搜索 网上给出的说法都模棱两可,跟我的情况不太一样,只是报出的错误信息一样而已。
尝试读取写入保护内存。这通常指示其他内存已损坏。"">"尝试读取写入保护内存。这通常指示其他内存已损坏。"
C#下利用ffmpeg频繁解码,导致 System.AccessViolationException ,且无法捕捉而使软件经常崩溃。 ffmpeg的原理无法了解,不过现有二法捕捉此异常: 法一:添加HandleProcessCorruptedStateExceptionsAttribute [HandleProcessCorruptedStateExceptions] void DoSo
System.AccessViolationException: 尝试读取写入保护内存。这通常指示其他内存已损坏
之前也遇到过这样的问题,一直未解决,最后重新安装系统,终于解决了。 没想到1个月以后,又出现了这种情况,让我奔溃,这次决定一定要找出原因; 调试后发现, connection.Open();以后报错,System.AccessViolationException: 尝试读取写入保护内存。这通常指示其他内存已损坏,网上搜了很多都没有作用。 然后我发现 连接本地数据库是好的,连接远程数据库
AE开发中的“尝试读取写入保护内存。这通常指示其他内存已损坏。”错误解析
IPolyline pPolyline2 = feature2.Shape as IPolyline; ITopologicalOperator topoOperator = pPolyline2 as ITopologicalOperator; ... ILine line = lineSegCol.get_Segment(i) as Line; IGeometry geo = to
尝试读取写入保护内存。这通常提示其他内存已损坏。
错误说明:
尝试读取写入保护内存。这通常指示其他内存已损坏。
解决办法:用管理员身份运行:netsh winsock reset
SQL2012 尝试读取写入保护内存。这通常指示其他内存已损坏
SQL2012连接不上数据库
尝试读取写入保护内存。这通常指示其他内存已损坏。(System.Data)
文章来自以于:http://blog.sina.com.cn/s/blog_670dd1b10101ikp3.html Sql server2012连接Sql server2008时出现的问题:已成功与服务器建立连接,但在登陆过程中发生错误。(provider:SSLProvider,error:0-接收到的消息异常,或格式不正确。) 以前连接是正常的,就这两天连不上了。(没有
尝试读取写入保护内存。这通常指示其他内存已损坏 ,新中二代身份证读取 Syn_ReadMsg,Syn_R
最近在做一个项目,其中涉及到身份证的读取问题,用的是新中二代身份证的读卡器,厂商有发送过来DLL,可是一调用,开始时读取信息很成功,但是,没几次程序就崩毁了,有时候直接就关闭,有时候就跳出错误提示:尝试读取写入保护内存。这通常指示其他内存已损坏,出错的函数是Syn_ReadMsg,     原型:     [DllImport("SynIDCardAPI.dll", EntryP
C# 尝试读取写入保护内存。这通常指示其他内存已损坏
一般来说IIS的验证方式有好几种,比较常见的就是匿名验证,集成Windows验证等等。 但是集成Windows验证每次都会谈个对话框出来,很麻烦,特别是在使用代理的情况下。 于是想能不能用一种Form的方式实现Windows验证呢? 当然啦,想想而已,本来对WEB开发就不算熟, Windows方面的就更差了。在网上搜索到了一种方式,利用 advapi32.dll的LogonUser方法是可以验证你输入的用户名密码是不是Windows的有效用户的。代码如下 :
AccessViolationException: 尝试读取写入保护内存。这通常指示其他内存已损坏。
C#:AccessViolationException: 尝试读取写入保护内存。这通常指示其他内存已损坏。
visual studio 2010 访问数据库的时候报错 尝试读取写入保护内存。这通常指示其他内存已损坏。
 系统 :win7 64位 工具:visual studio 2010 sp1 。 错误情况:当访问数据库的时候,报错尝试读取写入保护内存。这通常指示其他内存已损坏。 是在win7自动更新之后.出现的问题。笔者怀疑是系统更新失败,引起的错误 解决方案,运行cmd 之后,输入命令: netsh winsock reset 重启电脑。
尝试读取写入保护内存。这通常指示其他内存已损坏。 (System.Data)
最近新安装了SQL SERVER 2012,但是安装完成之后,不能连接远程服务器。提示错误为尝试读取写入保护内存。这通常指示其他内存已损坏。 (System.Data) 当再次尝试连接时,Sql server 2012 Management Studio 就崩溃了。而远程服务器能ping通,应用程序可以连接远程服务器上的数据库(sql server 2005),找到相关资料解决,原因为本地
ASP.NET学习笔记[11] - asp.net报错“尝试读取写入保护内存。这通常指示其他内存已损坏”的解决办法
调试的时候突然之间一连数据库就崩,报错: 其他信息: 尝试读取写入保护内存。这通常指示其他内存已损坏。 解决办法: 用管理员身份运行CMD:netsh winsock reset
【Emit基础】System.AccessViolationException: 尝试读取写入保护内存。这通常指示其他内存已损坏。
     当我将基于DataRabbit的应用程序放到windows server 2008 SP1上运行时,抛出了System.AccessViolationException,提示信息为:“尝试读取写入保护内存。这通常指示其他内存已损坏。”。而这个应用程序在windows server 2003上一直是非常正常的。根据异常的堆栈信息,可以知道是IORMapping.GetEnt
System.AccessViolationException”类型的未经处理的异常在 System.Data.dll 中发生。其他信息:尝试读取写入保护内存。这通常指示其他内存已损坏。
发生此问题“ ‘System.AccessViolationException’ 类型的未经处理的异常在 System.Data.dll 中发生”,可能是安装了VS2013后对系统中的winsock接口产生影响,因此第一种方法重置winsock可以解决得意;微软最近几天刚发布的.NET Framework4.5.2也彻底解决了这个问题,因此升级也是个不错的选择大笑。
GetPrivateProfileString函数 出现错误尝试读取写入保护内存。这通常指示其他内存已损坏。
错误如下: 原因是:StringBuilder必须先初始化才能使用。 将 StringBuilder temp =null 改为 StringBuilder temp = new StringBuilder() 问题解决
.NET3.5SP1 尝试读取写入保护内存的问题补丁
.NET3.5SP1 尝试读取写入保护内存的问题补丁。 微软官方补丁,仅供参考
System.AccessViolationException: 尝试读取写入保护内存。这通常指示其他内存已损坏。
System.AccessViolationException: 尝试读取写入保护内存。这通常指示其他内存已损坏。 昨天写的RC4的加解密程序,当C#调用C的dll时就会出现这个提示,尝试怎么修改都不行。Debug跟踪显示,应该返回string类型的函数返回值为空。也不知道怎么调试dlldll里下的断点始终提示无效。单独运行dll里的函数,结果没有问题。几乎可以断定是函数返回的地方出
“System.AccessViolationException”类型的未经处理的异常在 System.Drawing.dll 中发生,尝试读取写入保护内存。这通常指示其他内存已损坏
针对姚磊岳的博客文章中《利用Emgu.CV实现人脸识别详解 (C#)--附源码》(链接:http://blog.csdn.net/u011616825/article/details/51620061#reply)提供的源代码,运行一会儿,大约2-3分钟后在Program.cs中的Application.Run(new faceDetect());就出现““System.AccessViolationException”类型的未经处理的异常在 System.Drawing.dll 中发生 其他信息: 尝试
在 C# 中使用文件名启动应用程序
 本文演示了如何启动与某一给定文档扩展名或文件类型关联的应用程序而又无须知道该关联应用程序的名称或位置。例如,您可以用一个与 .bmp 文件扩展名关联的应用程序启动 Arcade.bmp 文件,多数情况下此应用程序就是 MSPaint.exe。 要求 Microsoft C# .Net 包括名称空间 名称空间必须出现在类声明之前,如下所示: using Sys
SQL server 2008提示“应用程序的组件发生了无法处理的异常”, “ 尝试读取写入保护内存。这通常指示其他内存已损坏”的解决方法
在新建查询时出现提示“应用程序的组件发生了无法处理的异常”,关闭或者点击“继续”后弹出 “ 尝试读取写入保护内存。这通常指示其他内存已损坏”:上网找了很久,说是通过   管理员身份运行 cmd ->  输入 netsh winsock reset 解决的比较多但是我试过几遍都不行。无奈之下只好找到SQL server 2008的安装中心选择“修复”之后会要求选择安装媒体,选择你的S...
c#中Marshal.Copy()方法的使用
c#中Marshal.Copy()方法的使用 2013年08月06日 ⁄ 综合 ⁄ 共 1705字 ⁄ 字号 小 中 大 ⁄ 评论关闭 c#中Marshal.Copy方法的使用 Marshal.copy()方法用来在托管对象(数组)和非托管对象(IntPtr)之间进行内容的复制 函数有很多重载,如下所示: Copy(ar
执行GetWindowTextA和其他api时,注意eax的长度,OD调试到内核层搞基,速度把我的文章放到首页
004015E7 |. 6A 20 push 20 ; /Count = 20 (32.) 004015E9 |. 68 42324000 push 00403242 ; |bbbb第二个框 004015EE |. FF75 0C pu
OpenFileDialog.ShowDialog() 提示 未处理 accesViolatinException 尝试读取写入保护内存。这通常指示其他内存已损坏。
http://www.codeproject.com/Questions/106826/OpenFileDialog-OleDbConnection-AccessViolationExce 歪果仁还真是可以哈,8楼
关于“无法从传输连接中读取数据: 尝试读取写入保护内存。这通常指示其他内存已损坏。”错误的解决方法之一
 今天在论坛看到一个问题http://topic.csdn.net/u/20091112/20/4549b0dd-f6b5-4252-8a98-3e7d8f40ee5e.html 原来的代码如下,该页面明明是iso-8859-1编码,但是用该编码读取总是报错,用GB2312编码虽然能直接读取,但内容不正确 static void Main( string[] args
VS2010 64位系统 连接数据库时报“连接数据库 尝试读取写入保护内存。这通常指示其他内存已损坏。”的错误 解决方法
在建立连接时,很简单的一段代码,却总是报错,确认代码是无误的,如下: public static SqlConnection getcon() { SqlCon = new SqlConnection(Str_sqlcon); //用SqlConnection对象与指定的数据库进行连接 SqlCon.Open(); //打开数据库连
《你不常用的c#之二》:略谈GCHandle
我们在使用c#托管代码时,内存地址和GC回收那不是我们关心的,CLR已经给我们暗箱操作。 但是如果我们在c#调用了一个非托管代码,比如vc的DLL,而且他有个回调函数,需要引用c#中的某个对象并操作, 这时候你就得要小心了。 要是非托管代码中用到得托管代码那个对象被GC给回收了,这时候就会报内存错误。 所以我们就要把那个对象“钉”住(pin),让它的内存地址固定,而不被垃圾回收掉,然后最
保护模式下的内存访问
保护模式下的内存访问模式、方法,而这个保护模式下的内存访问模式在实模式与保护模式已经介绍过是什么,这次来具体点看
tessnet2和3版本混用后程序错误的解决
这几天在使用tessnet2开发OCR程序,开始是使用2.0.4.0版本,程序正常。 后来测试使用3.0.2.0的Tesseract,结果回来发现2.0.4.0的用不了,提示Unable to load unicharset file C:\Program Files (x86)\Tesseract-OCR\eng.unicharset 看上去是加载语言包的路径不正确。
halcon算子实现视频显示和处理的例子
用视觉系统开发的halcon软件提供的算子实现视频显示和处理。
C#调用C++的dll,PInvoke问题和回调函数抛出异常access violation
不磨叽,直接上代码。 C++动态库中函数定义 #ifndef _AUDIOSYSSDK_H #define _AUDIOSYSSDK_H typedef void PlayResFunc(void *powner,int filestate, int playlen); extern "C" { int _stdcall Audio_OpenChannel(char *p
C#读写内存操作方式
public class MemoryHelp { [DllImportAttribute("kernel32.dll", EntryPoint = "ReadProcessMemory")] public static extern bool ReadProcessMemory ( IntPtr lpProcess,
Effective C#:改善C#代码的50个有效方法(原书第3版)
Effective系列
OPC 目标平台只能是 X86吗?--尝试读取写入保护内存
年初的规划了一个项目,项目中需要与PLC进行通讯,刚开始时我决定直接用WinCC 作为中间件 然后写VB脚本与数据库进行通讯,近期在coding时发现:我真心不想写VB脚本,效率太低了。       我后来通过多方求助,发现可以在C#中调用 OPC组件,然后直接与 OPC Server 进行通讯,然后就照着别人的代码进行复制,但是最终运行时报以下错误: 这是神马情况? 因为这
asp.net报错“尝试读取写入保护内存。这通常指示其他内存已损坏”的解决办法
“System.AccessViolationException”类型的未经处理的异常在 System.Data.dll 中发生  其他信息: 尝试读取写入保护内存。这通常指示其他内存已损坏。解决办法:用管理员身份运行CMD:netsh winsock reset
尝试读取写入保护内存
private AxMicrosoft.Office.Interop.VisOcx.AxDrawingControl axDrawingControl1;rnrn ((System.ComponentModel.ISupportInitialize)(this.axDrawingControl1)).BeginInit();rn // rn // axDrawingControl1rn // rn this.axDrawingControl1.Enabled = true;rn this.axDrawingControl1.Location = new System.Drawing.Point(38, 62);rn this.axDrawingControl1.Name = "axDrawingControl1";rn this.axDrawingControl1.OcxState = ((System.Windows.Forms.AxHost.State)(resources.GetObject("axDrawingControl1.OcxState")));rn this.axDrawingControl1.Size = new System.Drawing.Size(480, 288);rn this.axDrawingControl1.TabIndex = 2;rnrn ((System.ComponentModel.ISupportInitialize)(this.axDrawingControl1)).EndInit();rnrn运行最后一句的EndInit();报错,错误为:尝试读取写入保护内存,这通常指示其他内存已损坏。rn为什么?rn前边的BeginInit是正常的啊!
C# 中引用dll类库时 “不可访问,因为它受保护级别限制”
http://gzxabcdefg.blog.163.com/blog/static/2345179420105183180912/ 我做了一个C#类库,然后在另一个工程和引用类库中的类文件时,产生了“不可访问,因为它受保护级别限制”的错误。 原因是: 在工程中引dll类库中的文件时,只能访问中类库中定义类型为public的类文件,所以在创建类库时,需要定义向外部暴露的类的访
有方法读取一个已被其他进程打开且dwSharemode = 0的文件吗?
有方法读取一个已被其他进程打开且dwSharemode = 0的文件吗?
c#调用c++ 尝试读取写入保护内存
c#调用c++ 尝试读取写入保护内存,怎么解决rnrnc++ API:rn[code=csharp]rnvoid MD_InitMessageInfo(rn MD_MessageInfo* MessageInfo // pointer to MD_MessageInfo structrn)rnrnThe MD_InitMessageInfo structure initializes an MD_MessageInfo structure inrnpreparation for sending an email message using MD_SpoolMessage.rnrnParametersrnrn MessageInfo - pointer to an MD_MessageInfo structure. This members of thisrn structure are cleared and the priority member is set torn MD_PRECEDENCE_NORMAL.rnrnRemarksrnrn You should call this function immediately after declaring an MD_MessageInforn structure.rnrnExamplernrn MD_MessageInfo MessageInfo;rn MD_InitMessageInfo(&MessageInfo);[/code]rnrnrnc# APIrnrn[code=csharp]MDUser.InitMessageInfo MessageInfornrnThis method initializes the MessageInfo object in preparation for sending an email message rnusing MDUser.SpoolMessage.rnrnParametersrnrn MessageInfo - MDMessageInfo ojbect. The priority attribute is set torn MD_PRECEDENCE_NORMAL.rnrnRemarksrnrn You should call this method immediately after creating an instance of the MDMessageInfo object.rn[/code]rnrnrn[code=csharp] MDUser mdu = new MDUser();rn MDMessageInfo MessageInfo = new MDMessageInfo();rnrn MessageInfo.To = "test1@ceshi.com";rn MessageInfo.From = "test2@ceshi.com";rn MessageInfo.Subject = "邮件主题";rn MessageInfo.MessageBody = "邮件正文内容";rnrn mdu.InitMessageInfo(MessageInfo);[/code]rnrnrn程序运行到 InitMessageInfo 异常:尝试读取写入保护内存rnrn
ASP.NET远程连接SQL Server“尝试读取写入保护内存
问题:System.AccessViolationException: 尝试读取写入保护内存。这通常指示其他内存已损坏 解决:这通常是在ASP.NET远程连接SQL数据库时发生,设置一下网络环境,在cmd中运行netsh winsock reset,会提示重启机器,重启机器后即可。
解决dsoframer 在X86和X64系统上的使用问题
DsoFramer 是微软提供的专门用来第三方播放编辑office文件的插件 分别有三个文件 AxInterop.DSOFramer.dll,Interop.DSOFramer.dll,dsoframer.ocx三个文件 安装dsoframer 1)将dsoframer.ocx copy 到 windows\SysWOW64 目录下,此目录为32位控件所在的目录,system32 目
尝试读取写入保护内存"">DeviceIoControl 出现"尝试读取写入保护内存"
调试程序的时候 If DeviceIoControl(Device, FSCTL_DISMOUNT_VOLUME, 0, 0, 0, 0, dwBytesReceived, 0) = 0 Then 这句话被绿出来了,然后提示“尝试读取写入保护内存。这通常指示其他内存已损坏。”rnrnrn以下是源码:rn Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Integer, ByVal dwShareMode As Integer, ByVal lpSecurityAttributes As Integer, ByVal dwCreationDisposition As Integer, ByVal dwFlagsAndAttributes As Integer, ByVal hTemplateFile As Integer) As Integerrn Private Declare Function DeviceIoControl Lib "kernel32" Alias "DeviceIoControl" (ByVal hDevice As Integer, ByVal dwIoControlCode As Integer, ByVal lpInBuffer As Integer, ByVal nInBufferSize As Integer, ByVal lpOutBuffer As Integer, ByVal nOutBufferSize As Integer, ByVal lpBytesReturned As Integer, ByVal lpOverlapped As Integer) As Integerrn Private Declare Function DefineDosDevice Lib "kernel32" Alias "DefineDosDeviceA" (ByVal dwFlags As Integer, ByVal lpDeviceName As String, ByVal lpTargetPath As String) As Integerrn Private Declare Function CloseHandle Lib "kernel32" Alias "CloseHandle" (ByVal hObject As Integer) As Integerrn Private Const GENERIC_READ = &H80000000rn Private Const GENERIC_WRITE = &H40000000rn Private Const FILE_SHARE_READ = &H1rn Private Const FILE_SHARE_WRITE = &H2rn Private Const OPEN_EXISTING = 3rn Private Const FILE_FLAG_NO_BUFFERING = &H20000000rn Private Const INVALID_HANDLE_VALUE = -1rn Private Const IOCTL_FILE_DISK_CLOSE_FILE = &H8000E004rn Private Const FSCTL_DISMOUNT_VOLUME = &H90020rn Private Const FSCTL_LOCK_VOLUME = &H90018rn Private Const FSCTL_UNLOCK_VOLUME = &H9001Crn Private Const DDD_REMOVE_DEFINITION = &H2rnrn Private Sub UninstUSB(ByRef nDrive As String)rn Dim Device As Integerrn nDrive = "\\.\" & nDrive & ":"rn Device = CreateFile(nDrive, GENERIC_READ Or GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, 0&, OPEN_EXISTING, FILE_FLAG_NO_BUFFERING, 0)rn If Device = INVALID_HANDLE_VALUE Thenrn Console.WriteLine("Cannot open drive")rn Console.WriteLine("Operate failed")rn Exit Subrn Elsern Console.WriteLine("Open drive succeed")rn End Ifrn Dim dwBytesReceived As Integerrn If DeviceIoControl(Device, FSCTL_LOCK_VOLUME, 0, 0, 0, 0, dwBytesReceived, 0) = 0 Then Console.WriteLine("Cannot lock drive")rn If DeviceIoControl(Device, IOCTL_FILE_DISK_CLOSE_FILE, 0, 0, 0, 0, dwBytesReceived, 0) = 0 Then Console.WriteLine("Cannot close file of drive")rn [color=#008000]If DeviceIoControl(Device, FSCTL_DISMOUNT_VOLUME, 0, 0, 0, 0, dwBytesReceived, 0) = 0 Then[/color]rn Console.WriteLine("Cannot unmount drive")rn Console.WriteLine("Operate failed")rn Exit Subrn End Ifrn If DeviceIoControl(Device, FSCTL_UNLOCK_VOLUME, 0, 0, 0, 0, dwBytesReceived, 0) = 0 Then Console.WriteLine("Cannot unlock drive")rn If CloseHandle(Device) = 0 Then Console.WriteLine("Cannot close device handle")rn If DefineDosDevice(DDD_REMOVE_DEFINITION, nDrive, vbNullString) = 0 Thenrn Console.WriteLine("Cannnot delete drive letter")rn Console.WriteLine("Operate failed")rn Exit Subrn End Ifrn Console.WriteLine("Operate SUCCESS")rn Console.WriteLine()rn End Sub
C# 尝试读取写入保护内存
[code=C#]FileStream fs = new FileStream(pdfpath,FileMode.Open,FileAccess.Read);rn byte[] fileCount = new byte[fs.Length];rn fs.Read(fileCount, 0, fileCount.Length);rn fs.Close();rn Decrypt(ref fileCount);rn axFoxitPDFSDK1.OpenBuffer(fileCount, fileCount.Length, "");[/code]rnaxFoxitPDFSDK1是一个第三方组件,用阅读PDF文件的.这样,虽然能阅读,但总是报错,[color=#FF0000]尝试读取写入保护内存,这通常指示其他内存已损坏.[/color],无论我怎样去释放fs使用的资源,都没用,怎么回事?
【解决方案】SQLite操作优化:从内存读取写入内存和本地
SQLite是我非常喜欢的一个小型数据库。如果你真把它当SQL Server、Oracle来使用的话,那简直是灾难,读写效率带来的死锁问题够你受的。 不过,如果把整个数据库加载到内存中呢?哈哈,那简直是爽翻了。不过,写入怎么解决呢? 你的程序不知道什么时候会退出,一旦退出,数据还未保存的话,哭吧。。。。 其实,向数据库中写入数据的频率是非常低的,而读取数据的频率却很高。 且看我的更新方法: 1、把...
c#尝试读取写入保护内存
private static object BytesToStuct(byte[] bytes, Type type)rn rn // int size = Marshal.SizeOf(type);rn int size = bytes.Length;rn if (size > bytes.Length)rn rn return null;rn rn IntPtr structPtr = Marshal.AllocHGlobal(size);rn Marshal.Copy(bytes, 0, structPtr, size);rn object obj = Marshal.PtrToStructure(structPtr, type);rn Marshal.FreeHGlobal(structPtr);rn rn return obj;rn rnrn怎么会有下面的错误的呢,大侠们快来帮忙啊rnrnrn有关调用实时(JIT)调试而不是此对话框的详细信息,rn请参见此消息的结尾。rnrn************** 异常文本 **************rnSystem.AccessViolationException: 尝试读取写入保护内存。这通常指示其他内存已损坏。rn 在 System.Runtime.InteropServices.Marshal.PtrToStructureHelper(IntPtr ptr, Object structure, Boolean allowValueClasses)rn 在 System.Runtime.InteropServices.Marshal.PtrToStructure(IntPtr ptr, Type structureType)rn 在 GM_TOOL.ClientOnlineManger.BytesToStuct(Byte[] bytes, Type type)rn 在 GM_TOOL.ClientOnlineManger.online_usersearch_btn_Click(Object sender, EventArgs e)rn 在 System.Windows.Forms.Control.OnClick(EventArgs e)rn 在 System.Windows.Forms.Button.OnClick(EventArgs e)rn 在 System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)rn 在 System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)rn 在 System.Windows.Forms.Control.WndProc(Message& m)rn 在 System.Windows.Forms.ButtonBase.WndProc(Message& m)rn 在 System.Windows.Forms.Button.WndProc(Message& m)rn 在 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)rn 在 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)rn 在 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)rnrnrn************** 已加载的程序集 **************rnmscorlibrn 程序集版本: 2.0.0.0rn Win32 版本: 2.0.50727.3615 (GDR.050727-3600)rn 基本代码: file:///C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/mscorlib.dllrn----------------------------------------rnmscorlib.resourcesrn 程序集版本: 2.0.0.0rn Win32 版本: 2.0.50727.3615 (GDR.050727-3600)rn 基本代码: file:///C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/mscorlib.dllrn----------------------------------------rnGM_TOOLrn 程序集版本: 1.0.0.0rn Win32 版本: 1.0.0.0rn 基本代码: file:///C:/Documents%20and%20Settings/Administrator/桌面/Debug/GM_TOOL.exern----------------------------------------rnSystem.Windows.Formsrn 程序集版本: 2.0.0.0rn Win32 版本: 2.0.50727.3053 (netfxsp.050727-3000)rn 基本代码: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dllrn----------------------------------------rnSystemrn 程序集版本: 2.0.0.0rn Win32 版本: 2.0.50727.3614 (GDR.050727-3600)rn 基本代码: file:///C:/WINDOWS/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dllrn----------------------------------------rnSystem.Drawingrn 程序集版本: 2.0.0.0rn Win32 版本: 2.0.50727.3053 (netfxsp.050727-3000)rn 基本代码: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dllrn----------------------------------------rnSystem.Configurationrn 程序集版本: 2.0.0.0rn Win32 版本: 2.0.50727.3053 (netfxsp.050727-3000)rn 基本代码: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Configuration/2.0.0.0__b03f5f7f11d50a3a/System.Configuration.dllrn----------------------------------------rnSystem.Xmlrn 程序集版本: 2.0.0.0rn Win32 版本: 2.0.50727.3082 (QFE.050727-3000)rn 基本代码: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Xml/2.0.0.0__b77a5c561934e089/System.Xml.dllrn----------------------------------------rnzlib.netrn 程序集版本: 1.0.3.0rn Win32 版本: 1.0.3.0rn 基本代码: file:///C:/Documents%20and%20Settings/Administrator/桌面/Debug/zlib.net.DLLrn----------------------------------------rnSystem.Windows.Forms.resourcesrn 程序集版本: 2.0.0.0rn Win32 版本: 2.0.50727.3053 (netfxsp.050727-3000)rn 基本代码: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Windows.Forms.resources/2.0.0.0_zh-CHS_b77a5c561934e089/System.Windows.Forms.resources.dllrn----------------------------------------rnrn************** JIT 调试 **************rn要启用实时(JIT)调试,rn该应用程序或计算机的 .config 文件(machine.config)的 system.windows.forms 节中必须设置rnjitDebugging 值。rn编译应用程序时还必须启用rn调试。rnrn例如: rnrnrn rnrnrn启用 JIT 调试后,任何无法处理的异常rn都将被发送到在此计算机上注册的 JIT 调试器,rn而不是由此对话框处理。
C#调用C++的DLL 出现:“尝试读取写入保护内存
最近做的项目,外壳是用C#写的,核心代码使用C++写的。在C#调用C++的DLL的过程中发现了以下的错误:尝试读取写入保护内存。这通常指示其他内存已损坏。rn 以下是C++的函数实现:rn#pragma comment(linker, "/SECTION:MYSEC,RWS") rnrn#pragma data_seg("MYSEC") rnrnchar ResultBuffer[10000]; //ResultBuffer 是共享数据段中的一个char型数组,用来实现跨进程通信的rnrn#pragma data_seg() rnextern "C" __declspec(dllexport) char* GetRecordInfo()rnrn OutputDebugStringA(ResultBuffer);rn return ResultBuffer; rnrnrnC#下函数声明如下:rn [DllImport("HooksLib.dll")]rn public static extern StringBuilder GetRecordInfo();rnrn调用时,可以在DbgView中看到 ResultBuffer的值是正确的,但是在C#的代码中发生了尝试读取写入保护内存。这通常指示其他内存已损坏的错误。rn原来猜想是C#和C++中Char长度不一样,C#占两个字节,C++一个字节的问题,但是把Char转成了wchar_t也还是错。rn花了两天时间,没能解决问题。希望有哪位高手,指导下。rn
C# 调用dll函数,出现尝试读取写入保护内存
C# 调用dll函数rn 出现尝试读取写入保护内存。这通常指示其他内存已损坏.这是什么意思?急急!
尝试读取写入保护内存"">c# 编写ActiveX调用c++编写的dll 出现"尝试读取写入保护内存"
我用c#编写了一个ActiveX控件,其中调用过了c++编写的dll,在程序运行的时候出现了“尝试读取写入保护内存”的错误信息。但这个c++的dll在C#编写的WinForm下是运行正常的。下面是ActiveX的源代码rnusing System;rnusing System.Collections.Generic;rnusing System.ComponentModel;rnusing System.Drawing;rnusing System.Data;rnusing System.Text;rnusing System.Runtime.InteropServices;rnusing System.Windows.Forms;rnrnnamespace ReaderCTRrnrn [ComImport, GuidAttribute("8173BE03-E29B-49CB-A4B4-52778F6E37E5")]rn [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]rn public interface IObjectSafetyrn rn [PreserveSig]rn int GetInterfaceSafetyOptions(ref Guid riid, [MarshalAs(UnmanagedType.U4)] ref int pdwSupportedOptions, [MarshalAs(UnmanagedType.U4)] ref int pdwEnabledOptions);rnrn [PreserveSig()]rn int SetInterfaceSafetyOptions(ref Guid riid, [MarshalAs(UnmanagedType.U4)] int dwOptionSetMask, [MarshalAs(UnmanagedType.U4)] int dwEnabledOptions);rn rnrn [GuidAttribute("8173BE03-E29B-49CB-A4B4-52778F6E37E5"), ProgId("ReaderCTR.MyAxControlTest"), ComVisible(true)]rnrn public partial class MyAxControlTest : UserControl, IObjectSafetyrn rnrn [DllImport("M1Reader.dll", EntryPoint = "ResetReader", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]rn static extern byte ResetReader();rn rn public MyAxControlTest()rn rn InitializeComponent();rn rnrn #region IObjectSafety Membersrnrn public int GetInterfaceSafetyOptions(ref Guid riid, ref int pdwSupportedOptions, ref int pdwEnabledOptions)rn rn pdwSupportedOptions = 1;rn pdwEnabledOptions = 2;rn return 0;rn rnrn public int SetInterfaceSafetyOptions(ref Guid riid, int dwOptionSetMask, int dwEnabledOptions)rn rn return 0;rn rnrn #endregionrnrn private void button1_Click(object sender, EventArgs e)rn rn byte a = ResetReader(); //***出错的就是这一句。rn rnrn rn
C#调用C++的DLL出现 尝试读取写入保护内存 求救
C++函数rn__stdcall FUNCTIONA(CString ab,byte *ad);rnrnc#rnint32 FUNCTIONA(String ab,ref Byte[] ad);rnrn[size=13px][color=#FF0000]调用的时候出现尝试读取写入保护内存”rn请问该如何解决[/color][/size]
OpenTK学习笔记
最近要在C#的语言环境下开发OpenGL程序,参考了网上的博客论坛http://www.cnblogs.com/hanyonglu/archive/2012/06/12/2546581.html,总结如下:        1.在C#中直接调用OpenGL函数比较费事,一般不直接使用;        2.一般的开发方法是借助第三方开源库,比如SharpGL、CsGL、OpenTK、Tao
C#调用C dll 报错:尝试读取写入保护内存
C#调用C写的dll,参数中有一个int型的指针,一运行就报如题的错误,大家帮忙看下问题。其它的参数就忽略不写了哈。rnC代码:rnextern "C" __declspec(dllexport) int c_func(..., int* outdatalen)rnrn .......rn *outdatalen = 4; // 假如要返回给C#的值rn ........rnrnrnC#代码rn[DllImport("xxx.dll")]rnpublic static extern unsafe int c_func(..., int* outdatalen);rnrnpublic unsafe int sql_func(...,ref int outdatalen) //其它参数省略rnrn int ret = 0;rn rn int len = outdatalen;rn ret = c_func(..., &len); // 调用C dll函数rn outdatalen = len;rn return ret;rnrnrn代码已经简化,只列出问题部分,望参与讨论或给出解答。先行谢过。
急!!C# 调用c的DLL时提示“尝试读取写入保护内存...”
下面是c++DLL中的声明:rnint __stdcall sp_pp_card_get_track(char *trk2, char *trk3, char *pan)rnint __stdcall sp_pp_des_pin(char *pan, unsigned char *des_pin)rn我在c#调用该DLL时该怎么样声明呢?大家帮帮忙啊,我试了好多种数据类型,要么程序直接关掉,要么提示尝试读取写入保护内存。这通常指示其他内存已损坏。
C# ****不可访问,因为它受保护级别限制
我新项目里使用dll,引用之后编译失败,提示     解决方法:                  确保该项目和dll的 .NET Framwork版本一致
c#调用DLL尝试读取写入保护内存。这通常指示其他内存已损坏
DELPHI里dll的源码rnrnrnfunction Init(const CDT:integer):integer;stdcall;rn //释放对象 =0成功;=1失败rn function UnInit:integer;stdcall;rn //主机初始化com口函数 =0成功;=1失败rn function InitCom(const comid:string):integer;stdcall;rn //设置读写器状态 =0成功;=1失败rn function SetState(const state:integer):integer;stdcall;rn //读取卡号 =1失败rn function ReadCard(buffer: PChar; bufferlen: integer):integer;stdcall;rn //写信息到卡片中 =0成功;=1失败 mark=0 默认密码FF FF FF FF FF FF =1 新密码 d2 bb c3 f9 cc ecrn function WriteInfo(const mark:integer;const id:integer; const d1:integer;const d2:integer;const d3:integer;const d4:integer;rn const d5:integer;const d6:integer;const d7:integer;const d8:integer;const d9:integer;rn const d10:integer;const d11:integer;const d12:integer;const d13:integer;const d14:integer;rn const d15:integer;const d16:integer):integer;stdcall;rn //读信息到卡片中 =0成功;=1失败 mark=0 默认密码FF FF FF FF FF FF =1 新密码 d2 bb c3 f9 cc ecrn function ReadInfo(const mark:integer;const id:integer;d1:PChar;d2:PChar;d3:PChar;d4:PChar;d5:PChar;d6:PChar;d7:PChar;rn d8:PChar;d9:PChar;d10:PChar;d11:PChar;d12:PChar;d13:PChar;d14:PChar;d15:PChar;d16:PChar):integer;stdcall;rn //*******************内部函数**************************rn //设置发送数据标识rn function SetMark(const handle:THandle;const mark:byte):integer;rn //发送数据函数 =0成功;=1失败 =3 mark位设置失败rn function SendData(const handle:THandle):integer;rn //接收数据函数 =0成功;=1失败 =11 接收失败 =12 接收头错误 =5 超时错误rn function InceptData(const handle:THandle):integer;rn //计算效验值 //mark=1 读,=0 写rn function ComputeEfficacy(mark:integer):integer;rn我调用C#调用rnrn [DllImport("Project2.dll")]rn private static extern int Init(int CDT);rn //释放对象 =0成功;=1失败rn [DllImport("Project2.dll")]rn private static extern int UnInit();rnrn //主机初始化com口函数 =0成功;=1失败rn [DllImport("Project2.dll")]rn private static extern int InitCom(string comid);rn //设置读写器状态 =0成功;=1失败rn [DllImport("Project2.dll")]rn private static extern int SetState(int state);rn //读取卡号 =1失败rn [DllImport("Project2.dll")]rn private static extern int ReadCard(ref string buffer, byte bufferlen);rn //写信息到卡片中 =0成功;=1失败 mark=0 默认密码FF FF FF FF FF FF =1 新密码 d2 bb c3 f9 cc ecrn [DllImport("Project2.dll")]rn private static extern int WriteInfo(int mark,int id,int d1, int d2, int d3,int d4,int d5,int d6,int d7, int d8,int d9,int d10,int d11,int d12,int d13,int d14,int d15,int d16);rnrn //读信息到卡片中 =0成功;=1失败 mark=0 默认密码FF FF FF FF FF FF =1 新密码 d2 bb c3 f9 cc ecrn [DllImport("Project2.dll")]rn private static extern int ReadInfo(int mark,int id,ref string d1,ref string d2,ref string d3,ref string d4,ref string d5,ref string d6,ref string d7,ref string d8,ref string d9,ref string d10,ref string d11,ref string d12,ref string d13,ref string d14,ref string d15,ref string d16);rn //*******************内部函数**************************rn //设置发送数据标识rn [DllImport("Project2.dll")]rn private static extern int SetMark(ref IntPtr handle, byte mark);rn //发送数据函数 =0成功;=1失败 =3 mark位设置失败rn [DllImport("Project2.dll")]rn private static extern int SendData(IntPtr handle);rn //接收数据函数 =0成功;=1失败 =11 接收失败 =12 接收头错误 =5 超时错误rn [DllImport("Project2.dll")]rn private static extern int InceptData( IntPtr handle);rn //计算效验值 //mark=1 读,=0 写rn [DllImport("Project2.dll")]rn private static extern int ComputeEfficacy(int mark);rn
C#调用DLL 尝试读取写入保护内存。这通常指示其他内存已损坏。
// 参数: pstConvInfo 指向用来保存设备列表的缓存rn// iCount 为缓存中可保存多少个ST_CONVINFO结构。rn// iTimeOut 超时时间, 单位为毫秒rn// 返回: 搜索到的设备个数rnDLL_CONVERTER int CONV_FindConverter(ST_CONVINFO* pstConvInfo, int iCount, int iTimeOut);rn// 设备信息rn[code=c]typedef structrnrn char strMAC[20];rn char strIP[20];rnchar strUserName[64];rnchar strDeviceName[64];rnST_CONVINFO;[/code]rn以上是VC入口函数和结构体rnrn以下是C# 代码,请问大神们问题以下rnrn [code=csharp] [DllImport("Converter.dll")]rn static extern int CONV_FindConverter(ref ST_CONVINFO pstConvInfo, int iCount, int iTimeOut);rn [DllImport("Converter.dll")]rn static extern bool CONV_Init();rn rn public struct ST_CONVINFOrn rn [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]rn public string strMAC;rn [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]rn public string strIP;rn [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)]rn public string strUserName;rn [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)]rn public string strDeviceName;rn rn rn private void button1_Click(object sender, EventArgs e)rn rn ST_CONVINFO st_=new ST_CONVINFO ();rn CONV_Init();rn CONV_FindConverter( ref st_ ,1,100);rn rn string stm = st_.strMAC;rn string stip=st_.strIP;rn [/code]rnrn当 st_ 返回为两个或两个以的结构数据就会出现以下错误 如果只返回一个结构数据就没有问题,大神们请指点下rn[img=http://img.bbs.csdn.net/upload/201405/29/1401353272_445964.jpg][/img]
C#调用dll尝试读取写入保护内存。这通常指示其他内存已损坏"
该DLL是将DICOM图片格式传到PIVIEW中。该程序在VC里已经实现,现要在C#里实现。dll里方法接口为BOOL __stdcall dicom_storescu_execute(LPCSTR servername, int serverport,rnLPCSTR servertitle, LPCSTR clienttitle, rnLPCSTR filelist, STORESCUCALLBACK callback);rn其中STORESCUCALLBACK 是一个函数指针typedef void (__stdcall * STORESCUCALLBACK)(T_StoreProgress* progress);。rn调用为:rn isSuccessed = dicom_storescu_execute(TheadIPadress,rn TheadServerPort ,rn TheadServerTitle,rn TheadClientTitle, rn TheadImageFile ,rn MyStoreScuCallback);rnMyStoreScuCallback为一函数名rn在C#中rnpublic delegate void STORESCUCALLBACK(T_StoreProgress progress);rn[DllImport("dcmtrans.dll", EntryPoint = "dicom_storescu_execute")]rn public static extern bool dicom_storescu_execute(string servername,rn int serverport, string servertitle, string clienttitle,rn string filelist, STORESCUCALLBACK callback);rn调用为rnrn internal unsafe void startSCU(Object lpParam)rn rn StoreSCUThead scu_CS = (StoreSCUThead)lpParam;rn string TheadIPadress = scu_CS.strIPadress;rn int TheadServerPort = scu_CS.strServerPort;rn string TheadServerTitle = scu_CS.strServerTitle;rn string TheadClientTitle = scu_CS.strClientTitle;rn string TheadImageFile = scu_CS.strImageFile;rn int mxh = scu_CS.Theadxh;rn bool isSuccessed = false;rn STORESCUCALLBACK callback = new STORESCUCALLBACK(MyStoreScuCallback);rn isSuccessed = dicom_storescu_execute(TheadIPadress,rn TheadServerPort,rn TheadServerTitle,rn TheadClientTitle,rn TheadImageFile,rn callback);rnrn if (!isSuccessed)rn falseNum++;rn rnrnMyStoreScuCallback为函数名rn public void MyStoreScuCallback(T_StoreProgress progress)rn rn switch (progress.state)rn rn case T_StoreProgressState.StoreBegin:rn break;rn case T_StoreProgressState.StoreProgressing:rn break;rn case T_StoreProgressState.StoreEnd:rn break;rn default:rn break;rn rn rn其中startSCU是开辟一个线程调用的rn internal unsafe void OnSend(string path)rn rn string m_aetitle="";rn string m_ip = "";rn int m_port = 0;rn string m_Filename = "";rn string m_path = "";rn StringBuilder m_tmp = new StringBuilder(255);rn m_Filename = path + "test.dcm";rn m_path = path + "user_setting.ini";rn GetPrivateProfileString("SetupDCM", "aetitle", null, m_tmp, 15, m_path);rn m_aetitle = m_tmp.ToString();rn GetPrivateProfileString("SetupDCM" , "ip" , null , m_tmp , 15 , m_path);rn m_ip = m_tmp.ToString();rn GetPrivateProfileString("SetupDCM", "port", null, m_tmp, 15, m_path);rn m_port = Int32.Parse(m_tmp.ToString());rn StoreSCUThead uStoreSCUThead = new StoreSCUThead();rn uStoreSCUThead.strIPadress = m_ip;rn uStoreSCUThead.strServerPort = m_port;rn uStoreSCUThead.strServerTitle = "OPACS";rn uStoreSCUThead.strClientTitle = m_aetitle;rn uStoreSCUThead.strImageFile = m_Filename;rn uStoreSCUThead.Theadxh = 1;rn //Thread fThread = new Thread(new ThreadStart(startSCU));rn Thread fThread = new Thread(startSCU);rn fThread.Start(uStoreSCUThead);rn fThread.Join(1000);rn rn一编译就出错在调用函数dicom_storescu_execute“这报尝试读取写入保护内存”的错。请问各位大哥,我是不是函数指针转化的类型出错啦?而且我把MyStoreScuCallback里参数换为不是指针类型的了。这些有影响吗?rnrnrn
C#调用dll尝试读取写入保护内存。这通常指示其他内存已损坏。”
编译OK,调试时候显示的错误rn尝试读取写入保护内存。这通常指示其他内存已损坏。rnrn************** 异常文本 **************rnSystem.AccessViolationException: 尝试读取写入保护内存。这通常指示其他内存已损坏。rn 在 HZbox.HZjudge.DoRecognize(Byte[] byteSerializedCh, Int32 iByteNum, Int16 chDestCh, Int16& chWrittenCh, Double[] pEvalout, Int32 iENum, Int32[] state, Byte[] ch)rn 在 HZbox.HZjudge.Judge() 位置 I:\GoogleCode\hzapp\HZcomponent.HZbox\HZjudge.cs:行号 114rnrnrndll是C++的,是写.def的方式导出的方法rn原来的声明是这样的rn[code=C/C++]rnBOOL DoRecognize(rn const unsigned char* pWriteData, rn const int iDataLen, rn const unsigned short iDestWChar,rn unsigned short* iWrittenChar, rn double* pEvalOut, rn const int iENumber,rn int *state,rn char *cs);rn[/code]rn用在C#里我写成了rn[code=C#]rn[DllImport(@"C:\Windows\System32\RIT.dll", EntryPoint="DoRecognize")]rnstatic extern int DoRecognize(rn byte[] byteSerializedCh,rn int iByteNum,rn short chDestCh,rn ref short chWrittenCh,rn double[] pEvalout,rn int iENum,rn int[] state,rn byte[] ch);rn[/code]rn总觉得是不是类型错了。rnrn另外还有一点不知道值不值得一说,rn这个dll读取txt文件的,一开始调用是文件读不到,所以我把dll读取的文件路径都改成了绝对路径,放在system32下。rn然后就变成了这样的错误,请高手指教~
Win64 驱动内核编程-27.强制读写受保护内存
强制读写受保护内存     某些时候我们需要读写别的进程的内存,某些时候别的进程已经对自己的内存读写做了保护,这里说四个思路(两个R3的,两个R0的)。  方案1(R3):直接修改别人内存 最基本的也最简单的就是直接通过WriteProcessMemory 和 ReadProcessMemory对没有进行保护的程序的内存进行修改,一些单机游戏辅助什么的可能会有这种简单方式修改其他进
升级框架到net4.0后,调用DLL 出现 尝试读取写入保护内存错误
错误提示:尝试读取写入保护内存,这通常指示其它内存已损坏rnrnrn1.原项目由VS2008编写而成,后换成Vs2015。未更改目标框架,运行程序一切正常rnrn2. 通过右键项目 > 应用程序框架, 将主程序及出问题的DLL由原来的3.5改成4.0rn运行主程序并打开任意一个网页时,在页面加载完成的瞬间,出现如下图的错误,错误出现在名为extendedWebbroswer 的DLL里(这个DLL是webbrowser扩展组件,实现点击链接时新页面时在原窗口上打开,不跳出新窗口)。rnrn[img=http://img.bbs.csdn.net/upload/201610/09/1475999143_339094.png][/img]rnrn[color=#808080]上图的错误提示里的msoffice.dll 应为 extendedWebbroswer.dll[/color] rnrn由于不太看得懂DLL里的内容,原提供者也找不着了,在此请教,感谢!rnrnrn
VB.net调用C++的dll出现 尝试读取写入保护内存
下面是dll的说明rnint createMessage(char * authMessage,rnint* authMessageLength,rn char * sn,rn int * snLen)rn构建认证消息包. 自动判断用户是否已登录,根据临时信息构建相应的消息包。rn注:authMessage、authMessageLength、sn、snLen四个参数为出口参数,但需调用程序初始化相应大小的内存块。一般建议authMessage内存块长度为2500个字节以上,sn内存块长度为100个字节以上,以保证API数据有足够的内存进行存放。authMessageLength和sn分别为两个内存块的长度值。rn参数说明:rnIN:无rnOUT:rnauthMessage: API构建的认证消息包,为Base64编码rnauthMessageLength: 认证消息长度rnsn:用户证书序列号rnsnLen:用户序列号的长度rn返回值:rn0: 构建正确rn< _rn Public Function CreateMessage(ByVal Authmessage As String, ByVal Authmessagelen As Integer, ByVal ByValSn As String, ByVal Snlen As Integer) As Integerrn End Functionrnrn程序中这样调用,但是报错“尝试读取写入保护内存。这通常指示其他内存已损坏。”rn Dim X As Integerrn Dim a As String = ""rn Dim b As String = ""rn Dim c As Integer = 0rn Dim d As Integer = 0rn X = CreateMessage(a, c, b, d)rnrn
C#调用dll中得回调函数出现写入保护内存
强帮忙看下这段代码是不是哪个数据类型我转换错了rn[code=C/C++]rn/**********************************vc++**********************************************/rntypedef struct VIDEO_INFOrnrn int nVideoWidth;/**< 像素宽度 */rn int nVideoHeight;/**< 像素高度 */rn int nVideoFPS;/**< 每秒多少帧 */rn unsigned char data[58];/**< 解码信息头 */rn DWORD dataSize;/**< 解码信息头长度 */rn struct timeval presentationTime;/**< 解码信息头时间戳 */rnVIDEO_INFO;rnrnrn/** @brief 报警信息结构体 */rntypedef struct MSG_INFO rnrn char ip[16];/**< 报警设备IP */rn long object_id;/**< 对象ID */rn long rule_name;/**< 参考枚举 Rule_name */rn long rule_id;/**< 规则ID */rn double rel_center_x;rn double rel_center_y;rn double rel_dimension_x;rn double rel_dimension_y;rn double rel_velocity_x;rn double rel_velocity_y;rn long preset_id;rn double direction;rn double time_in_rule;rn double range;rnMSG_INFO;rnrnrntypedef void (CALLBACK *MSGCallBack)(LONG lCommand,LONG nID,int nCh, char *pAlarmInfo, DWORD dwBufLen, void* Context);//报警回调函数rn/** rn* @brief 视频流回调函数rn* @param nStreamID 视频流的索引ID,AIIVS_OpenStream返回的rn* @param nID 设备索引ID,AIIVS_Connect返回的rn* @param nCh 设备的通道号rn* @param pBuffer 视频流帧数据rn* @param dwBufSize 帧数据长度rn* @param presentationTime 此帧时间戳rn* @param RealDataCallBackContext AIIVS_OpenStream时候 RealDataCallBackContext传进的值rn* @return 无返回值rn*/rntypedef void (CALLBACK *fRealDataCallBack) (LONG nStreamID,LONG nID, int nCh, const unsigned char *pBuffer, DWORD dwBufSize,struct timeval presentationTime, void* RealDataCallBackContext);//视频流回调rnrnAIIVS_API void __stdcall AIIVS_Init();//初始化SDKrnrnAIIVS_API LONG __stdcall AIIVS_Connect(char * sIp, int nPort , char * sName , char * sPwd ,MSGCallBack pMsgCallBack = NULL, void * Context = NULL); //连接IVS设备rnAIIVS_API int __stdcall AIIVS_OpenStream(LONG nID , int nCh,fRealDataCallBack pRealDataCallBack = NULL,void *RealDataCallBackContext = NULL);//开启视频流,返回通道流IDrnrnAIIVS_API int __stdcall AIIVS_GetHeadStream(LONG nID , int nCh,VIDEO_INFO *pVideoInfo);//获取视频流头部rnrnrnIVSPLAY_API BOOL _stdcall IVS_PLAY_Init();//初始化rnIVSPLAY_API LONG _stdcall IVS_PLAY_OpenStream(HWND hWnd,VIDEO_INFO *pVideo_info,bool bRealdecode = true);//打开流播放rnrn[/code]rn[code=C#]rn/*********************************C#*******************************************/rnrn public const string aiIvs = "AIIVS.dll";rn public delegate void MSGCallBack(long lCommand,long nID,int nCh, ref MSG_INFO pAlarmInfo,uint dwBufLen,ref int Context);rn public delegate void fRealDataCallBack(long nStreamID, long nID, int nCh, byte[] pBuffer, uint dwBufSize, timeval presentationTime,ref int RealDataCallBackContext);rnrnrn [StructLayout(LayoutKind.Sequential, Pack = 1)]rn public struct VIDEO_INFOrn rn public int nVideoWidth;//视频像素宽度rn public int nVideoHeight;//视频像素高度rn public int nVideoFPS;//视频每秒播放帧数rn public byte[] data;//解码头rn public int dataSize;//解码头长度rn public timeval presentationTime;//解码头时间戳rn rnrnrn [StructLayout(LayoutKind.Sequential, Pack = 1)]rn public struct MSG_INFOrn rn public string ip;/**报警设备IP */rn public long object_id;/**对象ID */rn public long rule_name;/**参考枚举 Rule_name */rn public long rule_id;/**规则ID */rn public double rel_center_x;rn public double rel_center_y;rn public double rel_dimension_x;rn public double rel_dimension_y;rn public double rel_velocity_x;rn public double rel_velocity_y;rn public long preset_id;rn public double direction;rn public double time_in_rule;rn public double range;rn rn public struct timevalrn rn public long tv_sec;rn public long tv_usec;rn rnrnrn [DllImport(aiIvs]rn public static extern void AIIVS_Init();rnrn [DllImport(aiIvs]rn public static extern long AIIVS_Connect(string sIp, int nPort , string sName , string sPwd ,MSGCallBack pMsgCallBack, ref int Context);rn [DllImport(aiIvs, EntryPoint = "_AIIVS_OpenStream@16")]rn public static extern int AIIVS_OpenStream(ref long nID ,ref int nCh,ref fRealDataCallBack pRealDataCallBack, ref int RealDataCallBackContext);//开启视频流,返回通道流IDrnrnrn public const string ivsPlay = "IVSPlay.dll";rn [DllImport(ivsPlay]rn public static extern bool IVS_PLAY_Init();rn [DllImport(ivsPlay]rn public static extern long IVS_PLAY_OpenStream(IntPtr hWnd,ref VIDEO_INFO pVideo_info, bool bRealdecode);rnrn public partial class frmVido : Formrn rn public frmVido()rn rn InitializeComponent();rn rn public int n_lUserID = -1;rn public int RealDataCallBackContext = -1;rn public IvsAPI.MSGCallBack MsgBack;rn public IvsAPI.fRealDataCallBack FrdcBack;rn private void frmVido_Load(object sender, EventArgs e)rn rn IvsAPI.AIIVS_Init();rn VIDEO_INFO video = new VIDEO_INFO();rn MsgBack = new IvsAPI.MSGCallBack(msgCallBack);rn FrdcBack = new IvsAPI.fRealDataCallBack(frcBack);rn int ibi = 0;rnrnrnrn long ll = IvsAPI.AIIVS_Connect("192.168.1.15", 80, "admin", "admin",MsgBack, ref n_lUserID);rn int ii = IvsAPI.AIIVS_OpenStream(ref ll, ref ibi,ref FrdcBack, ref RealDataCallBackContext);rn int it = IvsAPI.AIIVS_GetHeadStream(ll, 1, ref video);rn bool bolt = PlayAPI.IVS_PLAY_Init();rn long lon = PlayAPI.IVS_PLAY_OpenStream(pictureBox1.Handle, ref video, true);rn rn private void ListenAlarmThreadProc()rn rn rn private void msgCallBack(long lCommand, long nID, int nCh, ref MSG_INFO pAlarmInfo, uint dwBufLen, ref int Context)rn rn MessageBox.Show("成功");rn rn private void frcBack(long nStreamID, long nID, int nCh, byte[] pBuffer, uint dwBufSize, timeval presentationTime,ref int RealDataCallBackContext)rn rn bool bol1 = PlayAPI.IVS_PLAY_InputData(nStreamID, pBuffer, dwBufSize);rn rn rn[/code]
【求助】尝试读取写入保护内存。的问题
CookieContainer cookies = new CookieContainer();rn HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://175888.5d6d.com/logging.php?action=login&loginsubmit=yes&inajax=1");rn request.ContentType = "application/x-www-form-urlencoded";rn request.CookieContainer = cookies;rn request.AllowAutoRedirect = false;rn request.Headers.Add("Accept-Language: zh-CN");rn request.Accept = "application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*";rn request.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/4.0; EmbeddedWB 14.52 from: http://www.bsalsa.com/ EmbeddedWB 14.52; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; staticlogin:product=cboxf2010&act=login&info=ZmlsZW5hbWU9UG93ZXJXb3JkMjAxME94Zl9VbHRpbWF0ZS5leGUmbWFjPTcyRjA0RUQxRDIzOTQzNUQ5NThEN0RCQzU0QjA1QjM0JnBhc3Nwb3J0PSZ2ZXJzaW9uPTIwMTAuNi4zLjYuMiZjcmFzaHR5cGU9MQ==&verify=6eeba67a2c6ecf5a12a3766ac2195a01; .NET4.0C; .NET4.0E; 360SE)";rn string postStr = "formhash=9d2a36b7&referer=http%3A%2F%2F175888.5d6d.com%2Fbbs.php&loginfield=username&username=wspyp24&password=wsfcdx01&questionid=0&answer=";rn byte[] data = Encoding.GetEncoding("gb2312").GetBytes(postStr);rn request.ContentLength = data.Length;rn request.Method = "POST";rn Stream stream = request.GetRequestStream();rn stream.Write(data, 0, data.Length);rn stream.Flush();rn HttpWebResponse response = (HttpWebResponse)request.GetResponse();rn是discuz论坛POST登录的程序,好像每次重启电脑后运行不会出异常,可是之后运行就会出异常 rnrn"尝试读取写入保护内存。这通常指示其他内存已损坏。"rnrn但是我加了try catch也没有用,程序还是会被中断。rnrn而且开始异常是出现在CookieContainer cookies = new CookieContainer();rn我把这个注释掉后就变成了HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create抛异常。rn谁能告诉我是怎么回事啊?我查了出这个异常都是非托管资源没有被释放的问题。可是这里除了stream哪里有非托管资源啊?
尝试读取写入保护内存"错误">请教这个"尝试读取写入保护内存"错误
用了c++写的一个dllrn[DllImport("FingerAPI.dll", EntryPoint "FingerFeatureExtract")]rnprivate static extern int FingerFeatureExtract(byte[] pInImg, out byte[] pFeatureData, int nImgWidth, int nImgHeight);rnrn这个函数在dll中是下面这样声明的rnint FingerFeatureExtract(unsigned char *pInImg, unsigned char *pFeatureData,int nImgWidth,int nImgHeight);rnrnC#中调用是这么写的rnFingerFeatureExtract(bufferFile,out pMinutiaeOld,500,500);rnbufferFile是一个有数据的数组,pMinutiaeOld是一个空数组,都是byte类型的rn结果运行的时候就出现了"尝试读取写入保护内存"错误rnrn刚学c#不久,急着要做一个东西出来,所以请各位帮帮忙,只有这些分,都奉上了,谢谢各位
请教一个“尝试读取写入保护内存”的问题
将一个基于mfc的exe项目中部分函数改造为dll函数输出,遇到了上面的问题,请帮忙看一下,谢谢。rn函数很简单:rnvoid CTestDlg::CatchWindow()//取出顶层的窗口rnrn m_pWindow = GetForegroundWindow();rn CString windowname;rn m_pWindow->GetWindowText(windowname);rnrnm_pWindow 的定义rnpublic:rn CWnd* m_pWindow;//游戏窗口rn这个函数在exe程序中使用是没有问题的,如果写到dll调用出现了如题的问题,请问如何解决?rndll的代码:rnvoid CTestDllApp::CatchWindow()rnrn m_pWindow=CWnd::GetForegroundWindow();rn CString windowname;rn m_pWindow->GetWindowText(windowname);rnrn......rnCTestDllApp theApp;rnrnextern "C" _declspec(dllexport) void Catch()rnrn theApp.CatchWindow();rnrn将第一句换成rnHWND hwnd=GetForegroundWindow();rnm_pWindow=CWnd::FromHandlePermanent(hwnd); 或者m_pWindow->Attach(hwnd); rn都报一样的错误。
█████WebBrowser,多线程,尝试读取写入保护内存。███████
[code=C#]rnprivate ArrayList DataList=new ArrayList();//存放任务rnprivate int timeout = 30; //超时时间设置(秒)rnprivate string LastUrl = "";rnrnprivate string GetHtml(string url)//获取htmlrnrn WebBrowser wb= new WebBrowser();rn //wb.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(wbWebBrowser_DocumentCompleted);rn wb.ScriptErrorsSuppressed = true;//禁止弹出JS错误框rn LastUrl = url.Replace("&", "&");rn wb.Navigate(LastUrl);rnrn DateTime lgTimeout = DateTime.Now; //开始载入,计时 rn while (wb.ReadyState != WebBrowserReadyState.Complete || LastUrl != wb.Url.ToString())rn rn Application.DoEvents();rn if ((DateTime.Now - lgTimeout).TotalSeconds > timeout)rn //设置超时时间,防止有些网站一直在加载,不完成rn return "";rn rn rn string html = wb.Document.Body.InnerHtml;rn wb.Dispose();rn return html;rnrnprivate void Execute()//执行rnrn string url="";rn while ((url = GetData()) != null)rn rn string html=GetHtml(url);rn //html存到数据库。rn rnrnrnprivate string GetData()rn//取任务。rn string retVal = null;rn if (DataList.Count > 0)rn rn retVal = DataList[0].ToString();rn DataList.RemoveAt(0);rn Application.DoEvents();rn rn return retVal;rnrnrnprivate void button1_Click(object sender, EventArgs e)rnrn //填充任务。rn DataList.Clear();rn //这里随便写几个rn DataList.Add("http://www.baidu.com/");rn DataList.Add("http://www.qq.com/");rn DataList.Add("http://www.163.com/");rn ...rnrn Thread tread = new Thread(new ThreadStart(Execute));rn tread.SetApartmentState(ApartmentState.STA);rn tread.Start();rn Thread tread1 = new Thread(new ThreadStart(Execute));rn tread1.SetApartmentState(ApartmentState.STA);rn tread1.Start();rnrnrn[/code]rnrnwhile (wb.ReadyState != WebBrowserReadyState.Complete || LastUrl != wb.Url.ToString()) //这里会报错:"尝试读取写入保护内存。这通常指示其他内存已损坏。" 是随机报错,可能跑了几个连接之后才报错,也可能一开始就报错。 应该是2个线程同时调用了某个东西,打架了。 最好Copy代码去运行看看
c# 调用c dll出现尝试读取写入保护内存,这通常指示其他内存已损坏
rntypedef structrn DWORD dwYear; //年rn DWORD dwMonth; //月rn DWORD dwDay; //日rn DWORD dwHour; //时rn DWORD dwMinute; //分rn DWORD dwSecond; //秒rnNET_DVR_TIME,*LPNET_DVR_TIME;rnrnNET_DVR_API LONG __stdcall NET_DVR_FindNextFile(LONG lFindHandle,LPNET_DVR_FIND_DATA lpFindData);rnrnrnrnrn public struct NET_DVR_TIMErn rn public int dwYear; /* 年 */rn public int dwMonth; /* 月 */rn public int dwDay; /* 日 */rn public int dwHour; /* 时 */rn public int dwMinute; /* 分 */rn public int dwSecond; /* 秒 */rn rn public struct NET_DVR_FIND_DATArn rn public string sFileName; /* 文件名 */rn public NET_DVR_TIME struStartTime; /* 文件的开始时间 */rn public NET_DVR_TIME struStoptime; /* 文件的结束时间 */rn public int dwFileSize; /* 文件的大小 */rn rnrn[DllImport("HCNetSDK.dll")]rn public static extern int NET_DVR_FindNextFile(int lFindHandle, ref NET_DVR_FIND_DATA lpFindData); rnrn rn NET_DVR_FIND_DATA strFileInfo=new NET_DVR_FIND_DATA ();rn rn bRet = NET_DVR_FindNextFile(m_lFileHandle, ref strFileInfo);rn
Winform SaveFileDialog.ShowDialog 报错:尝试读取写入保护内存
我做了一个Winform程序,数据库用的Access,在窗体上使用了一个SaveFileDialog控件,正常情况下,SaveFileDialog能使用,但是只要执行了访问数据库的操作,再使用SaveFileDialog,当执行[color=#FF0000]SaveFileDialog.ShowDialog()[/color]时就报错:[color=#FF0000]尝试读取写入保护内存。这通常指示其他内存已损坏[/color]。rnrn考虑是数据库资源没有释放,但是我在代码里写了conn.Close();conn.Dispose();rn是否是这样并未释放数据库资源?还是另外有其他的原因?rnrn数据库连接代码:rn private static OleDbConnection ConnAccess()rn rn string strConn="Provider=Microsoft.ACE.OLEDB.12.0;jet oledb:database password=zkgsoft4321;Data Source=" +"D:\\Data.accdb"+ ";Persist Security Info=False";rn OleDbConnection conn = new OleDbConnection(GetConnString());rn return conn;rn rn/// rn /// 返回第一行第一列rn /// rn /// rn public static object ExecuteScalar(string strCmdText)rn rn object strValue = null;rn using (OleDbConnection conn = ConnAccess())rn rn OleDbCommand cmd = new OleDbCommand();rn cmd.Connection = conn;rn cmd.CommandType = System.Data.CommandType.Text;rn cmd.CommandText = strCmdText;rn tryrn rn conn.Open();rn strValue = cmd.ExecuteScalar();rn rn catch (Exception e)rn rn throw e;rn rn finallyrn rn cmd.Dispose();rn conn.Close();rn conn.Dispose(); rn rn rn return strValue;rn rnrnSaveFileDialog代码:rnprivate void button2_Click(object sender, EventArgs e)rn rn System.GC.Collect();rn SaveFileDialog dlg = new SaveFileDialog();rn dlg.Filter = "Execl files (*.xls)|*.xls";rn dlg.FilterIndex = 0;rn dlg.RestoreDirectory = true;rn dlg.CreatePrompt = true;rn dlg.Title = "保存为Excel文件";rn dlg.InitialDirectory = "C:\\";rn [color=#FF0000]dlg.ShowDialog();[/color]
C#调用delphi dll接口问题
最近使用C#调用delphi dll中的PChar参数接口,结果出现内存错误。在Stack上找到了答案,转来此处。 Delphi dll中的声明 procedure PasswordDLL(month integer; password pchar); export;C#调用部分的代码 [DllImport( "DelphiPassword.dll", C
C#调用C写的dll,出现尝试读取写入保护内存。这通常指示其他内存已损坏。
//将汉字转换为内码//Function SC_NeiMa(pHanZi:pchar):Pchar;StdCall; 原型函数rn [DllImport("SCDLL32.dll", EntryPoint = "SC_NeiMa", SetLastError = true, CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]rn public static extern unsafe string SC_NeiMa(string pc);rn rn//调用rntextBox8.Text = SC_NeiMa(textBox1.Text.Trim());rn为何?
Kanzi基础---configure配置文件
kanzi加载启动的时候都需要加载默认选项的,有相应的配置文件及函数 kanzi对app的配置有两个地方: 1,设置kanzi studio工程的 xxxx.cfg 配置文件 eg: myApplication.exe -config=myConfiguration.cfg 2,在C++程序中配置 onConfig() 回调函数 eg: configuration.configu
高手请进 c# 调用c++ dll 提示尝试读取写入保护内存
[DllImport("HDWheelDllTwo.dll", EntryPoint = "?SetWorkStatus@CHDlib@@QAEXHHNH@Z", CharSet = CharSet.Auto,CallingConvention=CallingConvention.Cdecl)]rn//public static extern void SetWorkStatus(Int32 nDiameter, Int32 nWorkStatus, double dPSI, Int32 nLModel);也是一样的rnpublic static extern void SetWorkStatus(int nDiameter,int nWorkStatus, double dPSI,int nLModel);rn在这样调用的时候 SetWorkStatus(1200, 1, 100,1);报“尝试读取写入保护内存,这通常指其他内存已损坏”错误,c++函数原型为:rnvoid SetWorkStatus(int nDiameter,int nWorkStatus,double dPSI,int nLModel);rn烦请给位大神给点儿思路,给点儿想法,急需甘露啊!!!!rn
C# 调用C开发的动态链接库DLL 报 尝试读取写入保护内存
[code=C#]rn//调用C的dll函数,函数前两个参数为入参,第三个为出参rn[DllImport("NhImp.dll", EntryPoint = "getMembers", SetLastError = true, CharSet = CharSet.Unicode, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]rn public static extern int getMembers(ref string nd, ref string ylzh, StringBuilder members);rn[/code]rnrn[code=C#]rn//调用rnstring nd = "2012";rn string ylzh = "1412010103000029";rn StringBuilder YBOutBuf = new StringBuilder(10240);rn int retint = getNhMembers(ref nd, ref ylzh, YBOutBuf);rnrn[/code]rnrn一执行int retint = getNhMembers(ref nd, ref ylzh, YBOutBuf); 就报内存损坏错误,那位大侠指点下啊,谢谢!
c#调用c++ dll提示 尝试读取写入保护内存
查了n遍百度,都找不解决不了,只有上来求大牛帮帮忙了。。。。rnrn直接上代码:rnrnc++ dll代码rnrn文件: HookApi.hrnrn#include rn#ifndef _HOOKAPI_Hrn#define _HOOKAPI_Hrnrnclass HookApi rnpublic:rn LPVOID pOldFunEntry, pNewFunEntry ; // 初始函数地址、HOOK后的函数地址rn BYTE bOldByte[5], bNewByte[5] ; // 原始字节、目标字节rnrnpublic:rn HookApi () rn ~HookApi() rn // 实现HOOK APIrn void Hook (PSTR szModuleName,PSTR szFunName,FARPROC pFun)rn rn HMODULE hMod = ::GetModuleHandleA ( szModuleName ) ;rn if (hMod != NULL)rn rn pNewFunEntry = (LPVOID)pFun ;rn pOldFunEntry = (LPVOID)GetProcAddress ( hMod, szFunName ) ;rn bNewByte[0] = 0xE9 ;rn *((PDWORD)(&(bNewByte[1]))) = (DWORD)pNewFunEntry -(DWORD)pOldFunEntry - 5 ; rnrn DWORD dwProtect, dwWriteByte, dwReadByte ; rn VirtualProtect ( (LPVOID)pOldFunEntry, 5, PAGE_READWRITE, &dwProtect );rn ReadProcessMemory ( GetCurrentProcess(), (LPVOID)pOldFunEntry, bOldByte, 5, &dwReadByte ) ; rn WriteProcessMemory ( GetCurrentProcess(), (LPVOID)pOldFunEntry, bNewByte, 5, &dwWriteByte ) ;rn VirtualProtect ( (LPVOID)pOldFunEntry, 5, dwProtect, NULL ) ;rn rn rn // 重新HOOKrn void ReHook ()rn rn DWORD dwProtect, dwWriteByte ;rn VirtualProtect ( pOldFunEntry, 5, PAGE_READWRITE, &dwProtect );rn WriteProcessMemory ( GetCurrentProcess(), pOldFunEntry, bNewByte, 5, &dwWriteByte ) ;rn VirtualProtect ( pOldFunEntry, 5, dwProtect, NULL ) ;rn rn // 撤消HOOKrn void UnHook ()rn rn DWORD dwProtect, dwWriteByte ;rn VirtualProtect ( pOldFunEntry, 5, PAGE_READWRITE, &dwProtect );rn WriteProcessMemory ( GetCurrentProcess(), pOldFunEntry, bOldByte, 5, &dwWriteByte ) ;rn VirtualProtect ( pOldFunEntry, 5, dwProtect, NULL ) ;rn rn ;rnrn#endifrnrn文件 dllmain.cpprnrn// dllmain.cpp : 定义 DLL 应用程序的入口点。rn#include "stdafx.h"rnrn#include "HookApi.h";rnHookApi HookItem;rnrn// 定义MessageBoxA函数原型rntypedef int (WINAPI* PFNMessageBoxA)( HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType ) ;rnrn// 自定义的MessageBoxA函数rn// 实现对原始MessageBoxA的输入、输出参数的监控,甚至是取消调用rnint WINAPI New_MessageBoxA( HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType )rnrn // 撤消HOOKrn HookItem.UnHook () ;rn rn PFNMessageBoxA pfnMessageBoxA = (PFNMessageBoxA)HookItem.pOldFunEntry ;rn rn // 调用原函数,修改输入参数rn int ret = pfnMessageBoxA ( hWnd, "这是HOOK函数过程的消息框", "[测试]", uType ) ;rn rn HookItem.ReHook () ;rn rn return ret ;rnrnrn extern "C" __declspec(dllexport) void abc() rn rn // HOOK APIrn MessageBoxA ( 0, "正常消息框", "测试", 0 ) ;rn HookItem.Hook("USER32.dll","MessageBoxA",(FARPROC)New_MessageBoxA) ;rn rnrnBOOL APIENTRY DllMain( HMODULE hModule,rn DWORD ul_reason_for_call,rn LPVOID lpReservedrn )rnrnrn switch (ul_reason_for_call)rn rn case DLL_PROCESS_ATTACH:rn case DLL_THREAD_ATTACH:rn case DLL_THREAD_DETACH:rn case DLL_PROCESS_DETACH:rn break;rn rn return TRUE;rnrn上面代码编译成:CHook.dllrnrnc#代码很简单rnrn public partial class Form1 : Formrn rn [DllImport("CHook.dll")]rn public static extern void abc();rn public Form1()rn rn InitializeComponent();rn rnrn private void button1_Click(object sender, EventArgs e)rn rn abc();//点这里开始调用c++ hook ,没报错,证明已经运行了rn rnrn private void button2_Click(object sender, EventArgs e)rn rn MessageBox.Show("aaa");//这里报错,尝试读取写入保护内存rn rn rnrnrn请问,那里错了,c++水平不怎么样,很郁闷。。。。rnrn大牛们救救小弟。。。。。
c#调用C++ DLL 尝试读取写入保护内存
[code=C#] [ StructLayoutAttribute( LayoutKind.Sequential)]rn public struct tagNkMAIDEnumrn /// ULONG->unsigned intrn public uint ulType;rn /// ULONG->unsigned intrn public uint ulElements;rn /// ULONG->unsigned intrn public uint ulValue;rn /// ULONG->unsigned intrn public uint ulDefault;rn /// SWORD->shortrn public short wPhysicalBytes;rn /// LPVOID->void*rn public IntPtr pData;rn rn [ StructLayoutAttribute( LayoutKind.Sequential)]rn public struct tagNkMAIDObjectrn /// ULONG->unsigned intrn public uint ulType;rn /// ULONG->unsigned intrn public uint ulID;rn /// NKREF->LPVOID->void*rn public IntPtr refClient;rn /// NKREF->LPVOID->void*rn public IntPtr refModule;rn rnrn rn [DllImportAttribute("Type0003.md3", EntryPoint = "MAIDEntryPoint")]rn public static extern ForControl.eNkMAIDResult MAIDEntryPoint(ref ForControl.tagNkMAIDObject pObject,rn ForControl.eNkMAIDCommand ulCommand,rn uint ulParam,rn uint ulDataType,rn ref ForControl.tagNkMAIDEnum data,rn IntPtr pfnComplete,rn IntPtr refComplete);rn rn ForControl.tagNkMAIDObject Mod = new ForControl.tagNkMAIDObject();rn ForControl.tagNkMAIDEnum ModEnum;rnresult = MAIDEntryPoint(ref Mod, ForControl.eNkMAIDCommand.kNkMAIDCommand_CapGet, (uint)ForControl.eNkMAIDCapability.kNkMAIDCapability_Children, (uint)ForControl.eNkMAIDDataType.kNkMAIDDataType_EnumPtr, ref ModEnum, IntPtr.Zero, IntPtr.Zero);rn if (result != ForControl.eNkMAIDResult.kNkMAIDResult_NoError)rn return; rnrn if (ModEnum.wPhysicalBytes != 4)rn return; rn if (ModEnum.ulElements == 0)rn return; rn ModEnum.pData = Marshal.AllocHGlobal((int)(ModEnum.wPhysicalBytes * ModEnum.ulElements));rn //通过调用DLL函数将数据写入stEnum.pData 出错 显示尝试读取写入保护内存。这通常指示其他内存已损坏。 rn [color=#FF0000]result = MAIDEntryPoint(ref Mod,rn ForControl.eNkMAIDCommand.kNkMAIDCommand_CapGetArray,rn (uint)ForControl.eNkMAIDCapability.kNkMAIDCapability_Children,rn (uint)ForControl.eNkMAIDDataType.kNkMAIDDataType_EnumPtr,rn PmodEnum, rn IntPtr.Zero,rn IntPtr.Zero);[/color]rn rn if (result != ForControl.eNkMAIDResult.kNkMAIDResult_NoError)rn return; [/code]rnrn[code=C/C++] rntypedef struct tagNkMAIDObjectrn rn ULONG ulType; // One of eNkMAIDObjectTypern ULONG ulID;rn NKREF refClient;rn NKREF refModule;rn NkMAIDObject, FAR* LPNkMAIDObject;rnrntypedef struct tagRefObjrn rn LPNkMAIDObject pObject;rn SLONG lMyID;rn LPVOID pRefParent;rn ULONG ulChildCount;rn LPVOID pRefChildArray;rn ULONG ulCapCount;rn LPNkMAIDCapInfo pCapArray;rn RefObj, *LPRefObj;rn typedef struct tagNkMAIDEnumrn rn ULONG ulType; // one of eNkMAIDArrayTypern ULONG ulElements; // total number of elementsrn ULONG ulValue; // current indexrn ULONG ulDefault; // default indexrn SWORD wPhysicalBytes; // bytes per elementrn LPVOID pData; // allocated by the clientrn NkMAIDEnum, FAR* LPNkMAIDEnum;rnBOOL SelectSource( LPRefObj pRefObj, ULONG *pulSrcID )rnrn BOOL bRet;rn NkMAIDEnum stEnum;rn char buf[256];rn UWORD wSel;rn ULONG i;rn LPNkMAIDCapInfo pCapInfo = GetCapInfo( pRefObj, kNkMAIDCapability_Children );rn if ( pCapInfo == NULL ) return false;rnrn // check data type of the capabilityrn if ( pCapInfo->ulType != kNkMAIDCapType_Enum ) return false;rn // check if this capability suports CapGet operation.rn if ( !CheckCapabilityOperation( pRefObj, kNkMAIDCapability_Children, kNkMAIDCapOperation_Get ) ) return false;rnrn bRet = Command_CapGet( pRefObj->pObject, kNkMAIDCapability_Children, kNkMAIDDataType_EnumPtr, (NKPARAM)&stEnum, NULL, NULL );rn if( bRet == false ) return false;rnrn // check the data of the capability.rn if ( stEnum.wPhysicalBytes != 4 ) return false;rnrn if ( stEnum.ulElements == 0 ) rn printf( "There is no Source object.\n0. Exit\n>" );rn scanf( "%s", buf );rn return true;rn rnrn // allocate memory for array datarn stEnum.pData = malloc( stEnum.ulElements * stEnum.wPhysicalBytes );rn if ( stEnum.pData == NULL ) return false;rn // get array data 通过调用DLL函数将数据写入stEnum.pData rn [color=#FF0000]bRet = Command_CapGetArray( pRefObj->pObject, kNkMAIDCapability_Children, kNkMAIDDataType_EnumPtr, (NKPARAM)&stEnum, NULL, NULL );[/color]rnrn if( bRet == false ) rn free( stEnum.pData );rn return false;rn rnrn // show the list of selectable Sourcesrn for ( i = 0; i < stEnum.ulElements; i++ )rn printf( "%d. ID = %d\n", i + 1, ((ULONG*)stEnum.pData)[i] );rnrn if ( stEnum.ulElements == 1 )rn printf( "0. Exit\nSelect (1, 0)\n>" );rn elsern printf( "0. Exit\nSelect (1-%d, 0)\n>", stEnum.ulElements );rnrn scanf( "%s", buf );rn wSel = atoi( buf );rnrn if ( wSel > 0 && wSel <= stEnum.ulElements ) rn *pulSrcID = ((ULONG*)stEnum.pData)[wSel - 1];rn free( stEnum.pData );rn else rn free( stEnum.pData );rn if ( wSel != 0 ) return false;rn rn return true;rn[/code]
C# 调用DLL一个方法提示尝试读取写入保护内存
这个方法在头文件中是这样声明的rnrn[code=C/C++]rnCP5200API int CALLING_CONV CP5200_MakeCreateFileData(HOBJECT hObj, BYTE *pBuffer, int nBufSize, const char* pFilename, long lFilesize, const BYTE* pTimeBuffer);rn[/code]rnrn而我在C#是这样声明的rnrn[code=C#]rn[DllImport( m_strPath, CharSet = CharSet.Auto )]rn public static extern int CP5200_MakeCreateFileData( IntPtr hObj, byte[] pBuffer, int nBufSize, byte[] pFilename, long lFilesize, byte[] pTimeBuffer );rn[/code]rnrn调用代码部分代码如下:rn[code=C#]rnIntPtr hobj = CPower.CP5200.CP5200_CommData_Create( 0, 1, 0 );rn byte[] buffer = new byte[512];rn string filename = "test.txt";rn CPower.CP5200.CP5200_MakeCreateFileData( hobj, buffer, 512, System.Text.Encoding.Default.GetBytes( filename ), 32, new byte[6] 11, 2, 3, 4, 5, 6 );rn[/code]rnrn我很菜,所以望各位大虾们能说详细一点,我已经在这里郁闷很久了,谢谢rn
我们是很有底线的