c++ - 函数指针 - 模糊符号错误

标签 c++

MyClass 是一个单例类(在我的整个程序中只会有一个这样的类)。

我想做的事情如下。

  1. 使用 AddData 向我的类添加数据,获取返回的函数指针,然后我可以将其传递给 dll 中的“另一个”函数。
  2. 然后这个“其他”函数调用我的回调函数

我的课就是这样。

typedef void (*DataReceivedCallback)(int, int);  

class MyClass
{
    MyClass();
    ~MyClass();

    void AddData(int sourceId, DataReceivedCallback &callback);
    static void MyCallBackFunction(int var1, int var2);
};

void MyClass::AddData(int sourceId, DataReceivedCallback &callback)
{
    callback = &MyCallBackFunction;

}
void MyClass::MyCallBackFunction(int var1, int var2 )
{
    //do something blah blah
}

然后我可以做:

int main()
{
     DataReceivedCallback callback;
     MyClass->GetInstance()->AddData(1, callback);
     callback(1,100);
}

当我单步执行此操作时,我发现我确实进入了我想要的回调 MyCallBackFunction :)

然后我现在想做的是将这个在 main 中定义的“回调”传递给一个 dll 函数,该函数将回调到我的回调函数中。

我有 dll 的代码,所以我想修改一个函数,以便它接受我的回调函数参数。

我在 dll 函数签名中这样做:

void * someDllFunction( int var1, int var2, DataReceivedCallback& callback)
{
   callback(2, 200);
}

但是我得到了错误: 错误 C2872:“DataReceivedCallback”:不明确的符号

我该如何解决这个问题? 这是否与只允许跨 dll 边界使用 c 样式参数有关??

最佳答案

typedef void (*DataReceivedCallback)(int, int);

应该是,

typedef void (MyClass::*DataReceivedCallback)(int, int);

因为,MyCallBackFunctionMyClass 的非静态成员方法。所以它不能有常规的函数签名。 同时将分配更改为,

callback = &MyClass::MyCallBackFunction;

Demo .

关于c++ - 函数指针 - 模糊符号错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6898381/

相关文章:

c++ - 直通几何着色器

C++ multipule .cpp 文件错误 c2374

c++ - 将第一个+最后一个元素、第二个+倒数第二个元素等添加到 vector 中

c++ - 查找给定数组中的第三大偶数

c++ - 如何在 C++/UNIX 中查找库类型(.so 或 .a)

c++ - QT:无法访问类 'QByteArray' 中声明的私有(private)成员

c++ - 如何在 QWidget 中获取样式表更改事件?

c++ - Matlab 和 C++ 之间的转换

c++ - 如何操作这个界面?

c++ - 安装 Open GRM thrax 时出错