#include <iostream>
using namespace std;
struct VExtension {};
typedef bool (func_t)(int const& a, void* const& b, VExtension* const& v);
bool func(int const& a, void* const& b, VExtension* const& v)
{
std::cout << a <<"-" << b << std::endl;
}
extern "C" int extension_init(func_t*, VExtension*);
int main(int argc, char** argv)
{
VExtension ve;
extension_init(&func, &ve);
return 0;
}
extern "C" int extension_init(func_t* F, VExtension* v)
{
intptr_t ver = 7;
F(1, (void*)ver, v);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwpzdHJ1Y3QgVkV4dGVuc2lvbiB7fTsgCnR5cGVkZWYgYm9vbCAoZnVuY190KShpbnQgY29uc3QmIGEsIHZvaWQqIGNvbnN0JiBiLCBWRXh0ZW5zaW9uKiBjb25zdCYgdik7Cgpib29sIGZ1bmMoaW50IGNvbnN0JiBhLCB2b2lkKiBjb25zdCYgYiwgVkV4dGVuc2lvbiogY29uc3QmIHYpCnsKICAgIHN0ZDo6Y291dCA8PCBhIDw8Ii0iIDw8IGIgPDwgc3RkOjplbmRsOwp9CgoKZXh0ZXJuICJDIiBpbnQgZXh0ZW5zaW9uX2luaXQoZnVuY190KiwgVkV4dGVuc2lvbiopOwoKaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQp7CiAgICBWRXh0ZW5zaW9uIHZlOwogICAgZXh0ZW5zaW9uX2luaXQoJmZ1bmMsICZ2ZSk7CiAgICByZXR1cm4gMDsKfQoKZXh0ZXJuICJDIiBpbnQgZXh0ZW5zaW9uX2luaXQoZnVuY190KiBGLCBWRXh0ZW5zaW9uKiB2KQp7CiAgICBpbnRwdHJfdCB2ZXIgPSA3OwogICAgRigxLCAodm9pZCopdmVyLCB2KTsKfQ==