如何使回调全局,以便我可以将其用于其他功能?

时间:2015-10-09 20:37:44

标签: c++ dll stdcall

我宣布了这样一个函数:

int __stdcall DoSomething(int &inputSize, int &outputSize, void(* __stdcall progress)(int) )
{
}

如何进行progress()回调一个全局变量,以便在同一个DLL中的其他函数中使用它? 我是C ++的新手。

1 个答案:

答案 0 :(得分:1)

创建具有匹配签名的函数(即void (*)(int))。

#include <iostream>

//void (      *      )(     int    ) - same signature as the function callback
  void progressHandler(int progress)
{
    std::cout << "received progress: " << progress << std::endl;
}

int DoSomething(int &inputSize, int &outputSize, void (*progress)(int))
{
    progress(100);
    return 0;
}

int main()
{
    int inputSize = 3;
    int outputSize = 3;
    DoSomething(inputSize, outputSize, progressHandler);

    return 0;
}

输出:

received progress: 100

即使我删除了它(因为我使用了g++),您也可以保留__stdcall