我有一个带有普通 C 接口的旧 .dll,它在完成某些工作时需要回调来调用。它采用的回调类型为void (f*)(char* arg)。
我正在寻找一种在那里传递 C++ 函数对象的技巧,以便使用存储在某处的“this”指针调用回调,例如绑定,但简单的绑定不起作用
为了说明这一点: C 接口:
typedef void (f*)(char* param) Callback;
void registerCallback(Callback c);
Run Code Online (Sandbox Code Playgroud)
C++ 中的用法:
class A
{
void func1()
{
registerCallback(std::bind(&A::func2, _1, this)); // obviously doens't work
}
void func2(char* param)
{ ... }
};
Run Code Online (Sandbox Code Playgroud)
据我所知,使用类的实例和类的成员函数来实现此操作的唯一方法是:
class A
{
void func1();
void func2(char* param)
{ ... }
};
// Global pointer
A* aPtr = NULL;
// Non-member function.
// extern "C" is probably needed if the older DLL is expecting
// an unmangled C function pointer.
extern "C" void globalFunc2(char* param)
{
if ( aPtr == NULL )
{
// Deal with error
}
else
{
aPtr->func2(param);
}
}
void A::func1()
{
aPtr = this;
registerCallback(globalFunc2);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1082 次 |
| 最近记录: |