求高手帮助:
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中函数传递参数错误还是调用的时候给的参数错误??
求高手不吝赐教!谢谢
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中函数传递参数错误还是调用的时候给的参数错误??
求高手不吝赐教!谢谢
private Declare Sub voseGetChannelWavelength Lib "E:\myfile\VOSE32DLL.dll" (ByRef PWaveLength() as Double)
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)))
四楼的方法类似不过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