2

VB でのコールバック (C dll から)。

dll の ac 関数へのコールバックとして vb 関数を渡す必要があります。関数に 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 で、コールバック関数を定義しました。

Function MyCallback( ByVal inp As Byte, _ ByVal outp As Byte, _ ByVal framecount As Long, _ ByVal pastreamcallbacktimeinfo As Byte, _ ByVal pastreamcallbackflags As Byte, _ ByVal userdata As Byte) As Integer ' ここで賢いことをする End Function

dll の外部関数は次のように呼び出されます。

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

これは、外部関数の宣言で壊れています - AddressOf の関数ポインタとして型 IntPtr が好きではありません。

このコールバック関数を渡す実装方法を教えてもらえますか?

どうもありがとうデビッド

4

1 に答える 1

1

この MSDN の記事が役立ちます: C DLL から Visual Basic 関数をコールバックする方法

于 2009-01-26T21:53:41.997 に答える