2009-01-26 65 views
2

VB中的回調函數(來自C dll)。將VB回調函數傳遞給C dll - noob卡住

我需要將vb函數作爲回調函數傳遞給dll中的c函數。我知道我需要使用 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 pastreamcallbacktimeinfo爲字節,_ BYVAL pastreamcallbackflags爲字節,_ BYVAL用戶數據以字節) 作爲整數 「在這裏做聰明的事情 端功能

DLL中的外部函數調用

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

這是在外部函數的聲明打破 - 它不喜歡的類型IntPtr的 的功能AddressOf的指針。

任何人都可以告訴我如何實現傳遞這個回調函數嗎?

非常感謝 大衛

回答