Вызов функций-членов из DLL (библиотека AI для игр) - PullRequest
2 голосов
/ 15 июля 2010

Моя проблема заключается в следующем:

Я пытаюсь реализовать библиотеку C ++, которая может вызывать функции в базовом EXE.Я пытаюсь иметь минимальный объем кода на стороне EXE, чтобы заставить функционирование работать.

В настоящее время у меня есть объекты на стороне DLL, которые создаются вызовами функций DLL.Эти объекты содержат контейнер «действий», который представляет собой просто карту строк (имен действий) и указателей на функции на стороне EXE.Каждая из этих функций возвращает void и принимает в качестве аргумента контейнер boost :: any.Затем EXE просто должен вызывать функцию обновления в DLL каждый тик, и DLL думает и вызывает любое подходящее «действие».

Это нормально работает для обычных функций.Как я могу заставить это работать и для функций-членов?(Там, где DLL не знает, в каком объекте находится функция.)

Пожалуйста, дайте мне знать, если мой вопрос слишком расплывчатый, и я постараюсь уточнить.

Спасибо!

1 Ответ

2 голосов
/ 15 июля 2010

То, что вы хотите, это 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();

Надеюсь, это то, что вы искали.

связывающий элемент

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...