当前位置:编程学习 > VB >>

VB.EXE错误 提示指令引用的内存不能为read

各位兄弟,
最近用VB写了个测试系统,但是在调试过程中会出现内存不能被read或者write等对话框。
主要功能是:调用别人用C++写的DLL文件进行测试,由于测试要求同时测试很多台产品,所以我的程序中会在一个function里面同时读取6个文件夹下的DLL函数。

不知大家在调试的过程中有没有遇到过同样的问题

在网络上查到的关于PC机硬件的问题,我几乎都试过了,不管用。
目前猜到可能原因有两点:1.我调用的DLL有问题
                        2.VB代码中有bug。 典型的DLL函数应用问题,一般情况是DLL文件中的函数在VB中声明不正确所致。 你怎么不考虑一下你的操作系统有没有问题。 to 1楼
我调用的DLL文件中声明的函数应该是没有问题的,因为我在进行单台测试时,或者手动debug时,并不会出现这种不能被read的状况呀。。。。

to 2楼
我的操作系统已经换过N遍了,简体的繁体的,还有什么内存条之类的,都换过了
引用 3 楼 sweety2008 的回复:
to 1楼
我调用的DLL文件中声明的函数应该是没有问题的,因为我在进行单台测试时,或者手动debug时,并不会出现这种不能被read的状况呀。。。。

to 2楼
我的操作系统已经换过N遍了,简体的繁体的,还有什么内存条之类的,都换过了

我能想到的,都被你试过了。。。不过有些情况是这样的

我就遇到过,EXE运行没有问题,但在调试环境下就是出错。原因是VC++写的DLL里面的函数没有加:stdcall
引用 4 楼 veron_04 的回复:
引用 3 楼 sweety2008 的回复:
to 1楼
我调用的DLL文件中声明的函数应该是没有问题的,因为我在进行单台测试时,或者手动debug时,并不会出现这种不能被read的状况呀。。。。

to 2楼
我的操作系统已经换过N遍了,简体的繁体的,还有什么内存条之类的,都换过了

我能想到的,都被你试过了。。。不过有些情况是这样的

我就遇到过,EXE运行没有问题,但在调试……


DLL文件是客人提供的,我并不能改变它的内容,也不知道里面是什么代码
您说的stdcall是什么东西?
DLL 的调用约定错误(错误 49)
   

传送给动态链接库 (DLL)的参数必须符合例程的需要。调用约定要检查个数、类型、参数的顺序等。此错误有以下的原因和解决方法: 

程序调用被传递了错误的参数类型的 DLL中的例程时。 
确保所有的参数的类型和调用的例程中指定的声明符合。

程序调用被传递了错误的参数数目的 DLL中的例程时。 
请确保参数数目和所调用的例程的声明符合。

程序调用 DLL 的例程,但没有使用 StdCall 调用约定。 
如果 DLL 例程需要的是按值参数,那么请在例程的声明中确保这些参数是以 ByVal 进行了声明。

对于Windows DLL的Declare 语句包括了 CDecl。 
详细信息,可选取有问题的项目,并按下 F1 键。 
引用楼主 sweety2008 的回复:
各位兄弟,
最近用VB写了个测试系统,但是在调试过程中会出现内存不能被read或者write等对话框。
主要功能是:调用别人用C++写的DLL文件进行测试,由于测试要求同时测试很多台产品,所以我的程序中会在一个function里面同时读取6个文件夹下的DLL函数。

不知大家在调试的过程中有没有遇到过同样的问题

在网络上查到的关于PC机硬件的问题,我几乎都试过了,不管用。
目前猜到……


daclare声明有问题,或者,调用时,参数有问题,代码贴出来看看 感觉像是DLL内部错误 不能为读,就是指针飞到了一个不可读的区域.相应地,不能为写,就是指向了一个不可写的区域.

copymemory byval 0&,byval 99&,1

你用这一句看看,会出现个什么错误.

这种错误在VB自己的代码里基本上无法出现,因为VB把内存,指针等操作封装得严严实实,失去灵活性的代价下让稳定性与安全性提到最高.

所以除非像上面那样自己读写内存及胡乱使用指针,VB自己是不会出错的.

建议你与DLL开发者商量一下,检查一下指针及内存操作中是否有问题.

如果自己没DLL代码,就只有跟踪一下了,推荐使用OllyDbg. 本帖最后由 bcrun 于 2011-11-20 11:37:18 编辑 这样吧,你做一个日志.

在每个API调用前及调用后,都输出日志到文件.

或者调用debugoutputsting函数输出日志,并使用dbgview程序查看日志.

当发现在哪一个函数的调用后返回前挂了,就可以确定是函数里面的问题了.

至于为什么会出问题,需要你与DLL编写者详细地沟通,比如当时的内存情况,CPU情况,硬件情况等细节.

你现在提供的信息基本上是无法让别人帮助你的,能帮助你的也只有给你提出缩小范围的方案而已.
补充:VB ,  基础类
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,