求助这段代码,看不明白

shanyang1 2012-03-06 09:01:22
#pragma pack(pop)

//non-object API

typedef VOID (__stdcall *G33DDC_IF_CALLBACK)(CONST SHORT *Buffer,UINT32 NumberOfSamples,WORD MaxADCAmplitude,UINT32 ADCSamplingRate,DWORD_PTR UserData);
typedef VOID (__stdcall *G33DDC_DDC1_STREAM_CALLBACK)(CONST VOID *Buffer,UINT32 NumberOfSamples,UINT32 BitsPerSample,DWORD_PTR UserData);
typedef BOOL (__stdcall *G33DDC_DDC1_PLAYBACK_STREAM_CALLBACK)(VOID *Buffer,UINT32 NumberOfSamples,UINT32 BitsPerSample,DWORD_PTR UserData);
typedef VOID (__stdcall *G33DDC_DDC2_STREAM_CALLBACK)(UINT32 Channel,CONST FLOAT *Buffer,UINT32 NumberOfSamples,DWORD_PTR UserData);
typedef VOID (__stdcall *G33DDC_DDC2_PREPROCESSED_STREAM_CALLBACK)(UINT32 Channel,CONST FLOAT *Buffer,UINT32 NumberOfSamples,FLOAT SlevelPeak,FLOAT SlevelRMS,DWORD_PTR UserData);
typedef VOID (__stdcall *G33DDC_AUDIO_STREAM_CALLBACK)(UINT32 Channel,CONST FLOAT *Buffer,CONST FLOAT *BufferFiltered,UINT32 NumberOfSamples,DWORD_PTR UserData);
typedef BOOL (__stdcall *G33DDC_AUDIO_PLAYBACK_STREAM_CALLBACK)(UINT32 Channel,FLOAT *Buffer,UINT32 NumberOfSamples,DWORD_PTR UserData);

#pragma pack(push,1)

typedef struct
{
G33DDC_IF_CALLBACK IFCallback;
G33DDC_DDC1_STREAM_CALLBACK DDC1StreamCallback;
G33DDC_DDC1_PLAYBACK_STREAM_CALLBACK DDC1PlaybackStreamCallback;
G33DDC_DDC2_STREAM_CALLBACK DDC2StreamCallback;
G33DDC_DDC2_PREPROCESSED_STREAM_CALLBACK DDC2PreprocessedStreamCallback;
G33DDC_AUDIO_STREAM_CALLBACK AudioStreamCallback;
G33DDC_AUDIO_PLAYBACK_STREAM_CALLBACK AudioPlaybackStreamCallback;
} G33DDC_CALLBACKS;

#pragma pack(pop)

G33DDC_CALLBACKS里面哪些函数是可以直接调用的?调用方法,还有前面的typedef VOID (__stdcall....这种定义介绍一下

...全文
138 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
yiyefangzhou24 2012-03-06
  • 打赏
  • 举报
回复
额,这个代码写了一种动态调用库中函数的方法,首先用typedef申明函数类型,在实例华一个函数IFCallBack。他下面可能做的操作是LoadLibrary将库中的地址付给IFCallBack
shanyang1 2012-03-06
  • 打赏
  • 举报
回复
另外还有:
BOOL G33DDCAPIWrapper::RegisterCallbacks(DDC2PreprocessedStreamCallback^ theDDC2PreprocessedStreamCallback, AudioStreamCallback^ theAudioStreamCallback)
{
if (ourModuleHandle == NULL)
{
Console::WriteLine("{0} not loaded", APILIBRARY);

return FALSE;
}

if (ourDeviceHandle < 0)
{
Console::WriteLine("Device not opened");

return FALSE;
}

ddc2PreprocessedStreamCallback = theDDC2PreprocessedStreamCallback; // Callback to C#
audioStreamCallback = theAudioStreamCallback; // Callback to C#

// DDC2PreprocessedStream-callback from unmanaged to managed C++
NotificationDDC2PreprocessedStreamCallbackDelegate^ aDDC2PreprocessedStreamDelegate = gcnew NotificationDDC2PreprocessedStreamCallbackDelegate(NotificationDDC2PreprocessedStreamCallback);
GCHandle aHandle = GCHandle::Alloc(aDDC2PreprocessedStreamDelegate);
IntPtr aPointer = Marshal::GetFunctionPointerForDelegate(aDDC2PreprocessedStreamDelegate);
G33DDC_DDC2_PREPROCESSED_STREAM_CALLBACK aDDC2PreprocessedStreamCallback = static_cast<G33DDC_DDC2_PREPROCESSED_STREAM_CALLBACK>(aPointer.ToPointer());

// AudioStreamCallback from unmanaged to managed C++
NotificationAudioStreamCallbackDelegate^ anAudioStreamCallbackDelegate = gcnew NotificationAudioStreamCallbackDelegate(NotificationAudioStreamCallback);
aHandle = GCHandle::Alloc(anAudioStreamCallbackDelegate);
aPointer = Marshal::GetFunctionPointerForDelegate(anAudioStreamCallbackDelegate);
G33DDC_AUDIO_STREAM_CALLBACK anAudioStreamCallback = static_cast<G33DDC_AUDIO_STREAM_CALLBACK>(aPointer.ToPointer());

// Force garbage collection cycle to prove that the delegate does not get disposed
GC::Collect();

// Registration of callbacks
ourCallbacks.IFCallback = NULL;
ourCallbacks.DDC1StreamCallback = NULL;
ourCallbacks.DDC1PlaybackStreamCallback = NULL;
ourCallbacks.DDC2StreamCallback = NULL;
ourCallbacks.DDC2StreamCallback = NULL;
ourCallbacks.DDC2PreprocessedStreamCallback = aDDC2PreprocessedStreamCallback;
ourCallbacks.AudioStreamCallback = anAudioStreamCallback;
ourCallbacks.AudioPlaybackStreamCallback = NULL;

// Register callbacks
ourSetCallbacks(ourDeviceHandle, &ourCallbacks, 0);

return TRUE;
}
红字那一段:RegisterCallbacks(DDC2PreprocessedStreamCallback^ theDDC2PreprocessedStreamCallback, AudioStreamCallback^ theAudioStreamCallback)
为啥参数是DDC2PreprocessedStreamCallback^ theDDC2PreprocessedStreamCallback, AudioStreamCallback^ theAudioStreamCallback,也就是func(a^a,b^b)的形式??
gqjjqg 2012-03-06
  • 打赏
  • 举报
回复
函数指针,callbacks里如果 函数定义过并初始化到该结构体对象里,都可以调用吧....

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧