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作了处理,不能把偶然当必然.