C++ 类成员函数作为对导入dll的回调

C++ 类成员函数作为对导入dll的回调,c++,callback,dllimport,member-function-pointers,C++,Callback,Dllimport,Member Function Pointers,我有一个dll,它导出了以下函数。其中一个函数是回调函数定义,另一个函数是设置回调的函数 typedef void __stdcall RawStreamingCallback (RawData const *); void __stdcall OpenRawStreaming (int TunerId, RawStreamingCallback *pCallback); 我想将一个类成员函数设置为回调函数。这是我自己的类定义: public class XX { public: X

我有一个dll,它导出了以下函数。其中一个函数是回调函数定义,另一个函数是设置回调的函数

typedef void __stdcall RawStreamingCallback (RawData const *);

void __stdcall OpenRawStreaming (int TunerId, RawStreamingCallback *pCallback);
我想将一个类成员函数设置为回调函数。这是我自己的类定义:

public class XX {
public:
    XX() {}


    void CALLBACK RawStreamingCallbackkk(RawData const *data) {}

    bool startStreamingCallback(int tunerId) {
        RawStreamingCallback* p = (RawStreamingCallback *)(this->RawStreamingCallbackkk);

        OpenRawStreaming(tunerId, p);
    }
};
当我构建代码时,会出现以下错误:

类型转换“:无法从“重载函数”转换为“RawStreamingCallback(\uu cdecl*)”

如果我将回调函数声明为静态,则它正在运行。但我需要使用X类的成员函数。因为会有XX类对象的列表,我应该知道哪个对象的回调


是否可以将类成员函数用作导入DLL的回调函数?

通常,回调会使用用户数据指针,您可以将对象指针偷偷带到其中。由于此API不允许这样做,因此需要生成绑定到对象的自定义回调。请参阅我在中使用libffi的答案,该界面看起来不是很好。我希望在注册回调时,一个“用户数据”与回调相关联,或者将调谐器ID传递给回调(在这种情况下,每个ID只能有一个回调,这似乎是合理的)。不过,如果一次只能打开一个流,这是有道理的。顺便说一下:这个问题与DLL无关。是的,如果回调函数的成员是tunerId,我可以处理这个问题。不幸的是,它没有。所以我想知道是否可能使用类成员函数作为回调函数。@DoganX这是不可能的。您需要“传递”自由函数或静态成员。也许有一些方法可以解决您在这个库中的问题,但从您提供的几个细节中无法判断。
RawData
包含什么?通常,回调会获取一个用户数据指针,您可以将对象指针偷偷带到其中。由于此API不允许这样做,因此需要生成绑定到对象的自定义回调。请参阅我在中使用libffi的答案,该界面看起来不是很好。我希望在注册回调时,一个“用户数据”与回调相关联,或者将调谐器ID传递给回调(在这种情况下,每个ID只能有一个回调,这似乎是合理的)。不过,如果一次只能打开一个流,这是有道理的。顺便说一下:这个问题与DLL无关。是的,如果回调函数的成员是tunerId,我可以处理这个问题。不幸的是,它没有。所以我想知道是否可能使用类成员函数作为回调函数。@DoganX这是不可能的。您需要“传递”自由函数或静态成员。也许有一些方法可以解决您在这个库中的问题,但从您提供的几个细节中无法判断。
RawData
包含什么?