VB中的回调(来自C dll)。
我需要将一个vb函数作为回调函数传递给dll中的c函数。我知道我需要使用 该功能的地址,但我对如何做到这一点越来越困惑。
详细信息:
我传递回调地址的dll中的函数在C中定义为:
PaError Pa_OpenStream( PaStream** stream,
const PaStreamParameters *inputParameters,
const PaStreamParameters *outputParameters,
double sampleRate,
unsigned long framesPerBuffer,
PaStreamFlags streamFlags,
PaStreamCallback *streamCallback,
void *userData );
其中函数是参数7,* streamCallback。 PaStreamCallback类型因此定义:
typedef int PaStreamCallback(
const void *input, void *output,
unsigned long frameCount,
const PaStreamCallbackTimeInfo* timeInfo,
PaStreamCallbackFlags statusFlags,
void *userData );
在我的vb项目中,我有:
Private Declare Function Pa_OpenStream Lib "portaudio_x86.dll" _
( ByVal stream As IntPtr _
, ByVal inputParameters As IntPtr _
, ByVal outputParameters As PaStreamParameters _
, ByVal samprate As Double _
, ByVal fpb As Double _
, ByVal paClipoff As Long _
, ByVal patestCallBack As IntPtr _
, ByVal data As IntPtr) As Integer
(如果我错误地输入了其他一些参数,请不要担心,我会在以后找到它们!让我们来看看 现在专注于回调。)
在module1.vb中我定义了回调函数:
功能MyCallback(ByVal inp By Byte,_ ByVal out By By Byte,_ ByVal framecount As Long,_ ByVal pastreamcallbacktimeinfo As Byte,_ ByVal pastreamcallbackflags As Byte,_ ByVal userdata As Byte) 作为整数 '在这里做一些聪明的事 结束功能
使用
调用dll中的外部函数err = Pa_OpenStream( ptr, _
nulthing, _
outputParameters, _
SAMPLE_RATE, _
FRAMES_PER_BUFFER, _
clipoff, _
AddressOf MyCallback, _
dataptr)
这在外部函数的声明中被破坏 - 它不像IntPtr类型 作为AddressOf的函数指针。
有人能告诉我如何实现传递这个回调函数吗?
非常感谢 大卫