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的指針。
任何人都可以告訴我如何實現傳遞這個回調函數嗎?
非常感謝 大衛
所鏈接的頁面是爲Visual Basic 5,這是斷然老。看起來Davey正在使用Visual Basic .NET,這需要與古代VB5不同的策略。 – 2009-09-17 19:04:56