繁体   English   中英

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

[英]Passing VB Callback function to C dll - noob is stuck

VB中的回调(来自C dll)。

我需要将vb函数作为回调传递给dll中的ac函数。 我知道我需要为该函数使用addressof,但是我对如何实现它越来越困惑。

细节:

我将回调地址传递到的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作为字节,_ ByVal outp作为字节,_ ByVal帧数作为长,_ ByVal pastreamcallbacktimes作为字节,_ ByVal pastreamcallbackflags作为字节,_ ByVal用户数据作为字节)作为整数'在这里做聪明的事情结束功能

dll中的外部函数使用

err = Pa_OpenStream(    ptr, _
            nulthing, _
            outputParameters, _
            SAMPLE_RATE, _
            FRAMES_PER_BUFFER, _
            clipoff, _
            AddressOf MyCallback, _
            dataptr)

这在外部函数的声明中已被打破-它不喜欢IntPtr类型作为AddressOf的函数指针。

谁能告诉我如何实现传递此回调函数的方法?

非常感谢大卫

这篇MSDN文章将对您有所帮助: 如何从C DLL回调Visual Basic函数

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM