版权声明:www.gudianxiaoshuo.com (古典小说网) 今日头条号: 古典古韵古典小说、讨厌编程 https://blog.csdn.net/shuilan0066/article/details/82851114
主程序中,调用了第三方库,或类,
第三方库,需要实时传递给主程序数据,供主程序处理
这种情况下,用回调解决就非常合适了
回调:传递函数参数地址 到另一个库,另一个库有调用该函数, 这样在该回调函数中处理数据。
主程序端
1)主程序的 回调函数,想在此函数中处理数据
int sendSelfAudoDataCallBack(const char* buf, int length, int nNeedLength,int sample);
2)主函数传递函数地址给第三方类
void SetSelfAudioCallBack()
{
m_selfDefinedAudioData.SetCallBack(nbase::Bind(&ChatroomForm::sendSelfAudoDataCallBack, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4));
}
第三方库端
1)设置函数指针
typedef std::function<int(const char* buf, int length, int nNeedLength,int sample)> AudioCallback;
AudioCallback pAudio_cb = nullptr;
2)设置传入函数指针参数接口
void SetCallBack(AudioCallback cb /*= nullptr*/)
{
pAudio_cb = cb;
}
3)第三方库调用该函数
if (pAudioCB)
{
std::string pdata(reinterpret_cast<const char*>(pData), lBytesToWrite);
std::string result_data = pdata;
result_data = MutliChannelSoundToSingle(pdata, channel);
pAudioCB(result_data.c_str(), result_data.size(), netImNeedLength,sample_rate);
}