读书人

CopyMemory在IDE环境不会出错编译成

发布时间: 2012-03-26 15:46:55 作者: rapoo

CopyMemory在IDE环境不会出错,编译成exe程序后运行后出错?

这是我使用到的代码:

VB code
CopyMemory ByVal lAddrImage, m_scanInfo.Buffer, m_scanInfo.Width * m_scanInfo.Height + 514


为什么在IDE环境可以正常运行,但编译成.exe后就会出错呢?
编译成p代码也是会出错。


---------------------------
工程1: 工程1.exe - 应用程序错误
---------------------------
"0x7c922caf" 指令引用的 "0x00408000" 内存。该内存不能为 "read"。


要终止程序,请单击“确定”。
要调试程序,请单击“取消”。
---------------------------
确定 取消
---------------------------


[解决办法]
我也遇到过这个问题,没办法解决,最后只好改用其他办法了.
估计是windowsXP的内存保护机制问题,在IDE中由于在VB的调试框架下运行,内存的使用受制于VB,编译后在XP下就产生了兼容性问题了
[解决办法]
可能是你的函数声明和你的参数引用不相符吧?
[解决办法]
VB code
'将CopyMemory ByVal lAddrImage, m_scanInfo.Buffer, m_scanInfo.Width * m_scanInfo.Height + 514'改为CopyMemory ByVal VarPtr (lAddrImage), VarPtr (m_scanInfo.Buffer), m_scanInfo.Width * m_scanInfo.Height + 514'或者CopyMemory ByVal VarPtr (lAddrImage), ByVal VarPtr (m_scanInfo.Buffer), m_scanInfo.Width * m_scanInfo.Height + 514
[解决办法]
Dim lAddrImage As Long

CopyMemory ByVal lAddrImage, m_scanInfo.Buffer......

如果copymemory第二个参数是声明为byref的,那就凭这个参数的传递方式,多半就死定了.

m_scanInfo.Buffer里面的值是一个指针,但在BYREF声明的情况下,你这种语法传入的是这个变量的地址,那最多只能复制4字节(假如Buffer是LONG的话).

再多复制,后面的内存天知道是否可读......

IDE里没挂,是你运气好,或IDE作了处理,不能把偶然当必然.

读书人网 >VB

热点推荐