MyClass 是一个单例类(在我的整个程序中只会有一个这样的类)。
我想做的事情如下。
- 使用 AddData 向我的类添加数据,获取返回的函数指针,然后我可以将其传递给 dll 中的“另一个”函数。
- 然后这个“其他”函数调用我的回调函数
我的课就是这样。
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);
因为,MyCallBackFunction
是MyClass
的非静态成员方法。所以它不能有常规的函数签名。
同时将分配更改为,
callback = &MyClass::MyCallBackFunction;
Demo .
关于c++ - 函数指针 - 模糊符号错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6898381/