运行源程序,总报错:“0XOFOC2AAD”指令引用的“OX7236EECA”内存。该内存不能为“READ”。该程序调用的DLL放在C:\WINNT\system32目录下。
直接运行该程序生成的EXE,却可以正常运行。
请教各位高手,为什么?

解决方案 »

  1.   

    程序中DLL的函数是在模块中定义的方式如下:
    Public Declare Function InitCom Lib "Hy14s.dll" (ByVal ComPort As Integer, ByVal BaudRate As Integer) As Integer
    调用上
    Dim lRet As Long
    lRet = InitCom(1, 19200) 
    也担心返回值类型与lRet 的类型不一致,不过换成一致的一不行!
      

  2.   

    设计时:Public Declare Function InitCom Lib "C:\WINNT\system32\Hy14s.dll" (ByVal ComPort As Integer, ByVal BaudRate As Integer) As IntegerDim lRet As Long
    lRet = InitCom(1, 19200) 
      

  3.   

    改成下面这样试试:
    Public Declare Function InitCom Lib "Hy14s.dll" (ByVal ComPort As Long, ByVal BaudRate As Long) As Long写这个DLL的开发平台中的int(或者Integer)是32位的, 而VB的Integer是16位的,会有问题。
      

  4.   

    设计时:Public Declare Function InitCom Lib "C:\WINNT\system32\Hy14s.dll" (ByVal ComPort As Integer, ByVal BaudRate As Integer) As IntegerDim lRet As Long
    lRet = InitCom(1, 19200) 不关事的,程序会自动在程序文件所在的目录下找,如果没有找到则自动在系统目录找文件的,
    有时VB是会出现这样的问题,如果不方便调试的话,可以用windbg或ollydbg来调试的(当然这两种方法就没有这么方便了)
      

  5.   

    可以了,还是jadeluo说的对,谢谢各位了!