问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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

发布网友 发布时间:2022-04-22 13:35

我来回答

2个回答

热心网友 时间:2023-11-06 15:46

System.AccessViolationException尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
几经周折,觅得答案,原来是要指定
调用方式,如下就OK了:
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
public
delegate
void
CallbackFunc1(IntPtr
hWnd,
IntPtr
pArg);
而系统默认方式为
CallingConvention.StdCall。
程序终于不报错了,但是又出现结果不对了
定义成如下时,strName在方法中的值,只有一个字符,
public
delegate
void
CallbackFunc1(StringBuilder
strName,
IntPtr
pArg);
后来改为:
public
delegate
void
CallbackFunc1([MarshalAs(UnmanagedType.LPWStr)]
StringBuilder
strName,
IntPtr
pArg);
OK了,strName带出来的值完整了,参数类型定义成
string
或者
StringBuilder
都无所谓
还可以用
IntPtr
,或者
char*
都行(用char*
得加
unsafe)
char*
类型的,得到值后,可循环至'\0'得到整个字符串
IntPtr
类型的,可以用Marshal.Copy出来,如:
Marshal.Copy(IntPtr_source,
toBytes,
0,
1024);
如果报
“尝试读取或写入受保护的内存。这通常指示其他内存已损坏。”
异常,
还有可能是因为C++和C#的参数类型对应问题,
如:
bool
__declspec(dllimport)
getImage(unsigned
char**
ppImage,
int&
nWidth,
int&
nHeight);
对应成
[DllImport("test.dll")]
public
static
extern
bool
getImage(IntPtr
ppImage,
ref
int
nWidth,
ref
int
nHeight);时,
则该方法在调用前,要对传入的ppImage分配空间,如下
IntPtr
pImage
=
Marshal.AllocHGlobal(iWidth
*
iHeight);
这种方法不推荐,因为是带出结果来,一般这种指针不确定需要分配多大空间的。
正确的要对应成下面这样:
[DllImport("test.dll")]
public
static
extern
bool
getImage(ref
IntPtr
ppImage,
ref
int
nWidth,
ref
int
nHeight);
调用时只要定义就行了:
IntPtr
pImage
=
new
IntPtr();
int
refWidth
=
0,
refHeight
=
0;
getImage(ref
pImage,
ref
refWidth,
ref
refHeight);
总结,凡是双针指类型参数,可以用
ref
IntPtr
而对于
int*,
int&,
则都可用
ref
int
对应

热心网友 时间:2023-11-06 15:47

1、delphi默认的调用顺序是
cdecl,不知道在c#中那样是不是这种调用顺序
2、PChar很可能需要外部分配好的内存。
3、你用delphi或vc也写个调用的例子试试看
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
运航不锈钢304方管有哪几种型号 镀锌方管有哪些型号 方管型号有哪些 方管的型号有哪些 牌照过户要换新的吗 ...自己一辆江苏牌照的小汽车,名下还能拥有一辆杭州牌照的车吗?_百度... 方管有哪些厚度 国标方管的厚度有哪些规格? 学龄前,应该教会孩子哪些技能才合适? 对学龄前孩童来说什么最重要? 一点魔兽世界鼠标指向宏的问题!懂得来解释下 404 Not Found 求魔兽世界鼠标指向宏? exception access violation错误怎么解决? WOW鼠标指向目标的目标宏怎么做? 如何解决 access violation 魔兽世界里的鼠标指针怎么改 access violation 怎么办 魔兽世界,鼠标指向宏就是焦点打断宏吗?一样吗?谢谢 显示access violation.错误命令怎么办 魔兽世界的鼠标指向宏干什么用的? 魔兽世界鼠标指向不显示任何信息 关于魔兽世界鼠标指向宏的问题 魔兽世界鼠标指向宏怎样关闭? 魔兽世界怎样用鼠标控制方向啊啊 WOW-鼠标指向设焦点。 魔兽世界鼠标指向宏是什么意思 WOW求鼠标指向宏当前目标 魔兽世界鼠标指向是什么 魔兽世界 鼠标指向宏 win7系统运行foxmail提示access violation错误的解决方法 求个魔兽世界 骑士鼠标指向驱散宏。各位看清楚啊。 妫是什么字怎么读? 魔兽世界wow带鼠标指向的双技能宏怎么做? fortran中出现 access violation这样的错误 鏈夐┈娑﹀湪灏辫屼簡锛屾垜浠鍦ㄤ笉鍦ㄦ剰涔変笉澶是什么字 Megui生成AVS老是错误,该怎么办 未处理违章怎么办 404 Not Found access violation问题的解决办法! System.AccessViolationException: 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。 请问“致命错误UnhandledAccessViolentAccessEn0x0ffh”怎么处理?谢谢? 微信小程序需要自己开发? i5 3470现在有卖的吗?多少钱?我在淘宝上看加个主板才800块是假cpu吗? iphonex多少电量充最好 iphonex可以低电量充电吗 iPhoneX第一次自动关机再充电要紧吗? iPhonex关机充电不显示???? iphonex刚拔掉数据线就掉了10 iphonex电用到多少后充电