将VB回调函数传递给C dll - noob卡住了

时间:2009-01-26 21:45:01

标签: c vb.net dll callback

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的函数指针。

有人能告诉我如何实现传递这个回调函数吗?

非常感谢 大卫

1 个答案:

答案 0 :(得分:1)