首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

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

2012-03-26 
CopyMemory在IDE环境不会出错,编译成exe程序后运行后出错?这是我使用到的代码:VB codeCopyMemory ByVal lA

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

热点排行