関数ポインターに問題があり、ネット上でこの問題を解決するのに役立つものは何も見つかりませんでした。
void 関数のポインターを取る C API の関数があります。
extern int APIFunction(int, void (*func)(int));
API関数を呼び出すときに入れたい関数を持つクラスがあります。
class MyClass
{
public:
void myFunction(int status, otherAPi arguments...);
};
次に、メンバー関数へのポインターを作成し、クラスの新しいインスタンスを作成しました
typedef void (MyClass::*MyClassFunctionPointer)(int stat, otherAPi arguments...);
MyClassFunctionPointer fctPointer= &MyClass::myFunction;
LicenseSecurity instance;
作成した関数ポインターを使用して APi 関数を呼び出そうとすると、エラーが発生します。
int stat = APIFunction(5, fctPointer ); // -> error 1
int stat = APIFunction(5, instance.*fctPointer ); // -> error 2
最初と2番目のケースでそれぞれエラーが発生しました:
E2034 Impossible to convert 'void (MyClass::*)(int, otherAPITypes...)' into 'void (*) (int, otherAPITypes...)'
E2342 Bad type correspondence in the parameter 'func' ('void (*)(int, otherAPITypes...)' desired, 'void(int, otherAPITypes...)' obtained)
API 関数にアクセスできないため、変更できません。問題を要約するには:どのように「単純な」C関数ポインタを取得して、クラスのメンバー関数から関数の引数に入れるには?
ありがとう