[英]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.