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

时间:2010-07-15 03:25:49

标签: c++ dll boost

我的问题是:

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

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

这适用于普通功能。我怎样才能使这个也适用于会员功能? (DLL不知道函数所在的对象类型。)

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

谢谢!

1 个答案:

答案 0 :(得分:2)

你想要的是boost :: bind和boost :: function。

dll侧图将具有boost :: functions而不是函数指针。客户端将使用boost :: bind传递绑定对象,这可能是您想要的任何内容。

DLL方:

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

CallbackFunctionType gCallback;

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

void Update
{
    if (condition == true)
    {
        gCallback();
    }
}

在客户端:

class CallbackClass
{
    void CallbackMember();
};

CallbackClass x;

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

dllInterface->Update();

希望这就是你要找的东西。

bind member