C#,调用dll产生 "尝试读取或写入受保护的内存 。这通常指示其他内存已损坏。"的问题

由于易语言与c#做的DESC加解密方式,返回的数据不一致,所以,我用易语言写了一个dll,供c#调用,

结果在post的时候,有时候能正确返回数据,有时候则不能正常返回,而是返回空数据(c#没有做异常处理)

后来, 在c#端抛出异常后发现,原来返回空值,都已经报错了(提示:尝试读取或写入受保护的内存 。这通常指示其他内存已损坏。)

在网上查了,在c#调用 dll的时候,用指针的方式,就没有再出现问题。

/// <summary>
/// 这是易语言的DESC加密解密的dll
/// </summary>
/// <param name="strText">待加密的文本</param>
/// <param name="key">密钥</param>
/// <returns></returns>
[DllImport("DESEncrypt.dll")]
public static extern string Encrypt(string strText, string key);
[DllImport("DESEncrypt.dll")]
public static extern string Decrypt(string strText, string key);

改成如下方式:

[DllImport("DESEncrypt.dll")]
public static extern IntPtr Encrypt(IntPtr strText, IntPtr key);

[DllImport("DESEncrypt.dll")]
public static extern IntPtr Decrypt(IntPtr strText, IntPtr key);

返回值和参数,都改成 IntPtr 类型

调用的时候改成这种方式

IntPtr ptrIn = Marshal.StringToHGlobalAnsi(strPara);
IntPtr ptrIn2 = Marshal.StringToHGlobalAnsi("kimsSoftE");
IntPtr ptrIn3 = Decrypt(ptrIn, ptrIn2);
string[] strParaAry = Marshal.PtrToStringAnsi(ptrIn3).Split(‘,‘);

使用完后 释放 对象

Marshal.ReleaseComObject(strParaAry);

原文地址:https://www.cnblogs.com/gfwei/p/10339699.html

时间: 2024-08-02 12:56:19

C#,调用dll产生 "尝试读取或写入受保护的内存 。这通常指示其他内存已损坏。"的问题的相关文章

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

原文:C#尝试读取或写入受保护的内存.这通常指示其他内存已损坏. 今天打开一个之前写的程序,查询数据库资料,结果单击查询时出错,提示显示和ntdl.dll有关. 用VS2012调试时发现在调用数据集时提示"尝试读取或写入受保护的内存.这通常指示其他内存已损坏." 打开数据集选择预览数据时VS出错退出. 系统是Win7的,昨天更新过:切换到2003系统下则一切正常 经百度,找到解决办法: 用管理员身份运行CMD,输入netsh winsock reset并回车(注意,必须是已管理员身份运

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

在C#中调用别人的DLL的时候有时候出现 尝试读取或写入受保护的内存 .这通常指示其他内存已损坏. 在传值的时候还是用指针,再在C#中做转换就好了. 解决办法: [DllImport("APPLISTCC.dll")]public static extern string TestFunc1(string param1);string ret1 = TestFunc1("text"); 改成: [DllImport("APPLISTCC.dll"

C# 尝试读取或写入受保护的内存,这通常指示其他内存已损坏。错误类型为:System.AccessViolationException。

C# 尝试读取或写入受保护的内存,这通常指示其他内存已损坏.解决方案 报错 dll文件应该是C++写的.封装了之后供我的C#程序调用,结果就提示了错误:尝试读取或写入受保护的内存.这通常指示其他内存已损坏.错误类型为:System.AccessViolationException. 解决办法 在C#中调用别人的DLL的时候有时候出现 尝试读取或写入受保护的内存 .这通常指示其他内存已损坏. 在传值的时候还是用指针,再在C#中做转换就好了. [DllImport("APPLISTCC.dll&qu

ArcEngine尝试读取或写入受保护的内存

先说一下我的开发环境: Win10 + ArcGIS10.0 + ArcEngine10.0 + Framework4.0 今天调用新的GP工具则出现"尝试读取或写入受保护的内存.这通常指示其他内存已损坏"的异常(在此环境下,昨天,我还能够正常的调用GP).对于这一问题,有两大奇怪之处:一是环境未发生改变,昨天能够正常调用GP,今天调用任何GP都报错:二是昨天写的代码还是能够正常执行GP. 百度.谷歌了一天,除了检查代码本身的问题,还尝试了各个方面测试:license权限问题.COM对

asp.net报错“尝试读取或写入受保护的内存。这通常指示其他内存已损坏”的解决办法

“System.AccessViolationException”类型的未经处理的异常在 System.Data.dll 中发生 其他信息: 尝试读取或写入受保护的内存.这通常指示其他内存已损坏. 解决方案: 用管理员身份运行CMD:netsh winsock reset

Visual Studio 2012 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。

今天打开一个之前写的后台管理系统 用VS2012调试时发现在调用数据集时提示"尝试读取或写入受保护的内存.这通常指示其他内存已损坏." 打开数据集选择预览数据时VS出错退出. 系统是Win7的 经百度,找到解决办法: 用管理员身份运行CMD,输入netsh winsock reset并回车(注意,必须是已管理员身份运行,这个重置LSP连接) 运行后提示要重启生效,结果没重启就OK了.记录下.

SQL SERVER 2012 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。 (System.Data)

标题: 连接到服务器------------------------------无法连接到 192.168.1.253.------------------------------其他信息:尝试读取或写入受保护的内存.这通常指示其他内存已损坏. (System.Data)------------------------------按钮:确定------------------------------管理员身份运行 cmd -> netsh winsock reset***************

项目问题 : 尝试读取或写入受保护的内存。这通常指示其他内存已损坏

项目在Debug时,System.Data  , Connection 连接数据库时提示 : 尝试读取或写入受保护的内存.这通常指示其他内存已损坏 经查看 : 运行Window -> cmd  ->  netsh winsock reset  重置系统目录就可以了 .

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

SQL2012尝试读取或写入受保护的内存.这通常指示其他内存已损坏 今天打开SQL2012,突然就连接不了数据库,一开始还以为是某个服务器崩溃了,结果试了好几个,都还是如此,弹出提示如下: 尝试读取或写入受保护的内存.这通常只是其他内存已损坏.(System.Data) 重置 Winsock 目录之后网上也找了好多的答案,具体重置 Winsock 目录即可. 总结起来就是一句话: 管理员身份运行 cmd -> 输入 netsh winsock reset 如图所示: