在C ++程序中调用C函数

时间:2014-04-10 00:26:20

标签: c++ c

我正在使用一个c库,它有一个期望C函数指针的API。

是否可以为此函数指针传递C ++类成员函数?

以下是C API:

typedef int (*WRITE_FUNC_T)(void *d, char *buffer, int n);

void start(WRITE_FUNC_T callback);

class MyClass {
    public:
    int mycallback(void *d, char *buffer, int n);
}

我想将MyClass::mycallback传递给start()。当我这样做时,我得到一个编译错误,说类型的参数不匹配。

4 个答案:

答案 0 :(得分:1)

这对我有用:

#include <iostream>
#include <sstream>

typedef int (*WRITE_FUNC_T)(void *d, char *buffer, int n);

void start(WRITE_FUNC_T callback) {}

class MyClass {
public:
  int mycallback(char *buffer, int n) {
    return 0;
  }
  static int newcallback(void *d, char *buffer, int n) {
    return static_cast<MyClass*>(d)->mycallback(buffer, n);
  }
};

int main() {
  start(&MyClass::newcallback);
}

答案 1 :(得分:0)

尝试static int mycallback(void *d, char *buffer, int n);

答案 2 :(得分:0)

因为mycallback是一个类的方法,所以它的实际实现类似于int mycallback(MyClass &this, void *d, char *buffer, int n),它与WRITE_FUNC_T不兼容。尝试将其转换为static方法,尽管它可能不符合您的需求。

答案 3 :(得分:0)

我希望这可以帮助你。

class ClassA
{
public:
    int Callback(void *d, char *buffer, int n) 
    { 
        return 0;
    }
};

typedef int(ClassA::*FncPtr)(void *d, char *buffer, int n);

int main(int argc, const char** args)
{
    ClassA* classA = new ClassA();

    int retVal = (*classA.*(&ClassA::Callback))(0x00,0x00,0);

    return 0;
}