求高手帮助:
VB调用c++编写的DLL,要调用的dll函数头文件中有这么一函数:
void _stdcall voseGetChannelWavelength(double *pWavelength)
在VB中使用Dclare语句调用,格式如下:
Declare Auto Sub voseGetChannelWavlength Lib "E:\myfile\VOSE32DLL.dll" (ByRef pWavelength() As Double)
Dim dblWaveLength() As Double ‘定义一个数组
voseGetChannelWavelength(dblWaveLength) ’调用把获得的波长放入数组中  
运行调试时提示“封送处理错误”
要调用的函数可以返回六个double类型的波长值,我想把他们放到一个数组里例如dblWavelength(),
请问请问上面的程序错在哪里?Dclare中函数传递参数错误还是调用的时候给的参数错误??
求高手不吝赐教!谢谢  

解决方案 »

  1.   

    看看这个样的声明对否?
    private Declare Sub voseGetChannelWavelength Lib "E:\myfile\VOSE32DLL.dll" (ByRef PWaveLength() as Double)
      

  2.   

    还是不行啊,同样的问题,是不是这个地方出错了:voseGetChannelWavelength(dblWaveLength),数组的起始地址是不是这样传递呢??
      

  3.   


    private Declare Sub voseGetChannelWavelength Lib "E:\myfile\VOSE32DLL.dll" (ByVal    pWavelength as long)
    dim d(0 to 1000) as double
    传指针
    call voseGetChannelWavelength(Varptr(d(0)))
      

  4.   

    我用的时vb08,里面没有VarPtr关键字啊?!好像用intPtr可以,我在研究一下
      

  5.   

    经过努力自己总结一下吧:
    四楼的方法类似不过vb08里面没有VarPtr关键字,已经过时,用intPtr
    Declare Sub voseGetChannelWavelength Lib "E:\myfile\VOSE32DLL.dll" (ByVal pWavelength As Long)
    Public dblWaveLength(11) As Double     ‘要给出数组大小,好分配内存地址,因为内存地址要固定
    Public thObject As GCHandle = GCHandle.Alloc(dblWaveLength, GCHandleType.Pinned)     'dblWaveLength占用内存区域不变,并可通过地址访问
    Public tpObject As IntPtr = thObject.AddrOfPinnedObject()    '获得指向内存地址的指针
    Call voseGetChannelWavelength(tpObject)                       '获取通道波长 
    这样就将波长存到数组dblWaveLength(11)中了。有关vb2008指针的定义参见
    http://blog.csdn.net/music_0000/archive/2010/03/23/5408075.aspx