gpt4 book ai didi

c++ - 回调宏 (QT)

转载 作者:行者123 更新时间:2023-11-28 01:50:03 25 4
gpt4 key购买 nike

我有一个带有这样签名的函数

int iV_SetSampleCallback(pDLLSetSample pSampleCallbackFunction)  

pDLLSetSample 在哪里

typedef int (CALLBACK * pDLLSetSample) (struct SampleStruct rawDataSample);

我想将我的成员函数作为回调传递

int sampleCallbackFunction(struct SampleStruct sample);

当我这样调用它时

iV_SetSampleCallback(&MainWindow::sampleCallbackFunction);

我遇到了一个错误

error: C2664: 'int iV_SetSampleCallback(pDLLSetSample)': cannot convert argument 1 from 'int (__thiscall MainWindow::* )(SampleStruct)' to 'pDLLSetSample'

我不明白为什么会这样。 CALLBACK 宏是什么? __thiscall 从哪里来?我应该如何正确地将我的回调传递给这个函数?

最佳答案

发生错误是因为您试图将指针传递给非静态类成员函数 sampleCallbackFunction 而不是传递给常规函数的指针。请注意,非静态类成员函数具有显式的 this 参数。 CALLBACK 宏在 Windows 中经常使用,通常代表 stdcall 调用约定。

要修复此错误,您需要

  • 声明成员回调函数为静态
  • 将 CALLBACK 宏添加到成员函数之前,以便它具有预期的调用约定(或 CALLBACK 扩展到的任何内容)
static int CALLBACK sampleCallbackFunction(struct SampleStruct sample);

关于c++ - 回调宏 (QT),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43392246/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com