我有一個老式的帶有純C接口的.dll文件,在完成某些工作時需要調用回調函數。回調需要的是void (f*)(char* arg)
。將成員函數傳遞給需要回調的C接口
我在尋找一招,通過C++函數對象有這麼回調與「this」指針存儲的地方,像綁定,但簡單綁定不起作用
爲了說明這個調用:C接口:
typedef void (f*)(char* param) Callback;
void registerCallback(Callback c);
用法在C++:
class A
{
void func1()
{
registerCallback(std::bind(&A::func2, _1, this)); // obviously doens't work
}
void func2(char* param)
{ ... }
};
你的C API應該在某處使用'userdata' /'cookie' /'context'參數。如果這不是作者應該受到死刑的話。 – milleniumbug
'std :: bind'返回不可轉換爲函數指針的未指定類型的值。對於一般策略,請參閱https://blogs.msdn.microsoft.com/oldnewthing/20140127-00/?p=1963/ Lambdas不會工作,因爲只有無捕獲的lambda可以衰減到函數指針。 – milleniumbug
registerCallback使用了怎樣的'char * param'? – SergeyA