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