问题如下:
在VB里调用一个VC写的DLL中的函数,在VC里声明的原型如下:
BOOL EXPORT __stdcall WriteFlashData(unsigned char *mBuffer,int count)在VB里先声明
Private Declare Function WriteFlashData Lib "start.dll" (ByRef Buffer As Byte, ByVal count As Long) As Boolean调用:
Dim mBuffer(3) As Byte
    mBuffer(1) = 2
    mBuffer(2) = 3
    mBuffer(0) = 4
    Dim result As Boolean
    result = WriteFlashData(mBuffer(0), 3)
发生“指令引用内存错误”
请各位大侠指点

解决方案 »

  1.   

    在VB里先声明                                             地址是long
    Private Declare Function WriteFlashData Lib "start.dll" (ByRef Buffer As long, ByVal count As integer) As Boolean
    int--integer
      

  2.   

    楼上说得都有可能,但是你关键还要看看数据类型的问题,通常在vc里的动态连接库在vb中引用错误都是参数类型的问题
      

  3.   

    谢谢各位的热情帮助,但是我按照yefanqiu(叶帆) 的方法把声明改成
    Private Declare Function WriteFlashData Lib "start.dll" (ByRef Buffer As Long, ByVal count As Long) As Boolean调用改为
    Dim mBuffer(3) As Byte
        mBuffer(1) = 2
        mBuffer(2) = 3
        mBuffer(0) = 4
        Dim result As Boolean
        result = WriteFlashData(mBuffer, 3)结果编译错误
      

  4.   

    ByRef Buffer As Long -> ByVal Buffer As String这样试试呢?
      

  5.   

    看来你就是要传一数据块...可以把函数在vb中的申明改成:
    Private Declare Function WriteFlashData Lib "start.dll" (ByVal lpBuffer As long, ByVal count As integer) As Boolean然后调用的时候:
    result = WriteFlashData(VarPtr(mBuffer(LBound(mBuffer))), 3)其实也就是强行传递指针啦~还有要注意的是,看你的代码你应该是想生成一个包含3元素的数组,应该是:
    Dim mBuffer(2) as Bytevb里面缺省的数组下标是0!
      

  6.   

    谢谢各位了
    不过按照realKK(KK.CHeN) 的方法,还是错误依旧啊
      

  7.   

    Private Declare Function WriteFlashData Lib "start.dll" (ByRef Buffer As Byte, ByVal count As Long) As LongDim mBuffer(2) As Byte
      

  8.   

    都试过了,不行
    应该是realKK(KK.CHeN) 的方法最合理呀
    为什么不行呢?看不出来有什么问题
      

  9.   

    谢谢大家,问题解决了,至于原因,我也不太明白。
    我将DLL中的宏去掉就可以了。
    但这个DLL在VC中调一点问题都没有。
    莫名其妙的。
    感觉VB版的同志都很热情。
    谢谢你们的帮助。