C++ 调用C++;方法从C回调中调用

C++ 调用C++;方法从C回调中调用,c++,c,callback,C++,C,Callback,我将C库应用到C++项目中。这个库允许我登记C++回调,在这个回调中我应该调用一个对象的C++方法。 情况是这样的: myclass.h class myclass { public: myclass(); void callme(); }; extern "C" { void init(): int callback(int,int); } myclass.cpp myclass::myclass() { init(); } void mycl

我将C库应用到C++项目中。这个库允许我登记C++回调,在这个回调中我应该调用一个对象的C++方法。 情况是这样的:

myclass.h

class myclass
{
public:
    myclass();
    void callme();
};


extern "C"
{
     void init():
     int callback(int,int);
}
myclass.cpp

myclass::myclass()
{
   init();
}

void myclass::callme()
{
   cout<<"Ok\n";
}

    extern "C"
    {
       void init()
       {
          //code 

          setlibraryCallback(callback);

          //code
       }


       int callback(/*some arguments that I can't change*/ int a, int b)
       {
          //I should call  "callme()" methos of my c++ object
       }
    }
myclass::myclass()
{
init();
}
void myclass::callme()
{

cout库通常允许您提供一个
void*
值作为“上下文”,然后将其传递给回调。如果库不提供该功能(huh?),您可以使用线程局部变量(在单线程程序中也称为全局变量)

这就是代码通常的样子

class A {
public:
    static void static_callback(void * ctx) {
        static_cast<A*>(ctx)->callback();
    }
    void callback();
};

extern void library_function(void (*callback)(void *), void * ctx);

int main()
{
    A a;
    library_function(&A::static_callback, &a);
}
A类{
公众:
静态void静态_回调(void*ctx){
静态_cast(ctx)->callback();
}
无效回调();
};
外部void库函数(void(*回调)(void*),void*ctx);
int main()
{
A A;
库\函数(&A::静态\回调,&A);
}

库通常允许您提供一个
void*
值作为“上下文”,然后传递给回调函数。如果库不提供该功能(huh?),您可以使用线程局部变量(在单线程程序中也称为全局变量)

这就是代码通常的样子

class A {
public:
    static void static_callback(void * ctx) {
        static_cast<A*>(ctx)->callback();
    }
    void callback();
};

extern void library_function(void (*callback)(void *), void * ctx);

int main()
{
    A a;
    library_function(&A::static_callback, &a);
}
A类{
公众:
静态void静态_回调(void*ctx){
静态_cast(ctx)->callback();
}
无效回调();
};
外部void库函数(void(*回调)(void*),void*ctx);
int main()
{
A A;
库\函数(&A::静态\回调,&A);
}

你需要在你的帖子中包含一个实际问题。现在我们不知道你需要什么和/或想要什么。“我能从这个C回调中调用C++方法吗?”——当你尝试它时发生了什么?“如果是的,我怎么办?”——什么,你不知道如何调用函数?我不能叫“Calm()”。函数,因为外部代码不在类中,如果我尝试调用callme()我得到了一个错误。为什么不从C++对象中获得C++类的一个实例并调用<代码> CalMe<代码>?源中的注释暗示了对象的使用,但是你不引用一个对象。你可以使用A,但是这意味着只有一个实例:<代码> MyCube < /Cord>。现在我们不知道你需要什么和/或想要什么。“我能从这个C回调中调用C++方法吗?”——当你尝试它时发生了什么?“如果是的,我怎么办?”——什么,你不知道如何调用函数?我不能调用“Calm()”函数,因为外部代码不在类中,如果我试图调用CALME()我得到一个错误。为什么不从C++对象中获得一个C++类的实例,并调用该代码> CalMe<代码>?源中的注释暗示了对象的使用,但是你不引用一个对象。你可以使用A,但是这意味着只有一个实例:<代码> MyCube < /Cord>。