Ответ 1
C не имеет понятия thiscall
. Соглашение о вызове C не позволяет напрямую вызывать функции членов объекта С++.
Для этого вам необходимо предоставить API-интерфейс обертки вокруг вашего объекта С++, который явно принимает указатель this
, а не неявно.
Пример:
// C.hpp
// uses C++ calling convention
class C {
public:
bool foo( int arg );
};
API-интерфейс обертки:
// api.h
// uses C calling convention
#ifdef __cplusplus
extern "C" {
#endif
void* C_Create();
void C_Destroy( void* thisC );
bool C_foo( void* thisC, int arg );
#ifdef __cplusplus
}
#endif
Ваш API будет реализован в С++:
#include "api.h"
#include "C.hpp"
void* C_Create() { return new C(); }
void C_Destroy( void* thisC ) {
delete static_cast<C*>(thisC);
}
bool C_foo( void* thisC, int arg ) {
return static_cast<C*>(thisC)->foo( arg );
}
Там также много отличной документации. Первый Я столкнулся с, можно найти здесь.