C++ 从DLL(游戏AI库)调用成员函数

C++ 从DLL(游戏AI库)调用成员函数,c++,dll,boost,C++,Dll,Boost,我的问题是: 我尝试实现一个C++库,它可以调用基exe中的函数。我试图在EXE端使用最少的代码,以使功能正常工作 目前,我有DLL端实体,它们是由DLL函数调用创建的。这些实体包含一个“操作”容器,它只是字符串(操作名称)和指向EXE端函数的指针的映射。每个函数都返回void并将boost::any的容器作为参数。然后,EXE只需在DLL中的每个滴答声中调用一个更新函数,DLL就会进行思考并调用适当的“操作” 这在正常功能中运行良好。我怎样才能使它也适用于成员函数?(DLL不知道函数所在的对象

我的问题是:

我尝试实现一个C++库,它可以调用基exe中的函数。我试图在EXE端使用最少的代码,以使功能正常工作

目前,我有DLL端实体,它们是由DLL函数调用创建的。这些实体包含一个“操作”容器,它只是字符串(操作名称)和指向EXE端函数的指针的映射。每个函数都返回void并将boost::any的容器作为参数。然后,EXE只需在DLL中的每个滴答声中调用一个更新函数,DLL就会进行思考并调用适当的“操作”

这在正常功能中运行良好。我怎样才能使它也适用于成员函数?(DLL不知道函数所在的对象类型。)

如果我的问题太模糊,请告诉我,我会尽力澄清


谢谢

您需要的是boost::bind和boost::function

dll侧映射将具有boost::函数,而不是函数指针。客户端将使用boost::bind传递绑定对象,该对象可以是您想要的任何对象

DLL端:

typedef boost::function<void ()> CallbackFunctionType;

CallbackFunctionType gCallback;

void SetCallback(CallbackFunctionType& callback)
{
    gCallback = callback;
}

void Update
{
    if (condition == true)
    {
        gCallback();
    }
}
希望这就是你想要的


似乎很简单,但这似乎不包括传递参数?这可能吗?还有可能在DLL端进行绑定,以避免EXE必须包含boost库,还是这会导致蠕虫的出现?
class CallbackClass
{
    void CallbackMember();
};

CallbackClass x;

dllInterface->SetCallback(bind(&CallbackClass::CallbackMember, &x));

dllInterface->Update();