VC6下DLL,VS2010下用,运行调试异常。

VC6下开发的DLL,在VC6下开发应用程序可以使用前述DLL,工程转换到VS2010之后也可以使用,但是在VS2010下直接使用前述DLL,编译可以通过,但是运行调试时报内存访问异常。请问大侠,该如何解决?

2个回答

两个可能性,一个是本来程序就有内存的问题,但是vc2010对内存的检查更严格,所以问题得以暴露。
另一个可能是单字节双字节的问题,或者一些结构体长度定义不同,你内存分配硬编码了长度,而不是用sizeof求值,导致内存分配不正确。

solo945
solo945 这样来看,有理由怀疑是dll的地址分配与之前VC6下的是不同的,但是VC6转到VS2010下的又没有问题,说明转过来的工程dll地址分配没有问题。这样看来,是否是开发环境的设置的问题呢?
4 年多之前 回复
solo945
solo945 我在反汇编下跟踪了一下,发现内存访问异常的具体原因是,内部函数地址运算得到的地址为0,调用地址为0的函数,从而导致内存访问异常。但是在VC6工程转到VS2010后的工程中反汇编跟踪,确不会有这样的问题。
4 年多之前 回复
solo945
solo945 但是VC6下开发的工程,转换到VS2010下又是可以运行的,这是怎么会事呢?
4 年多之前 回复

不同编译器版本的实现有区别,微软是不保证不同版本的编译器之间的DLL能够互相调用,建议的方式是,exe,dll都用同一个版本的VS来编译调用

oyljerry
oyljerry 嗯。这种时候就比较容易出问题。所以最好是用源码方式集成其他库
4 年多之前 回复
solo945
solo945 谢谢,最好的方式应该是exe和dll都是一个IDE编译出来,但有时候有限制,dll不是自己开发的就没有办法了!
4 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐