Отправка параметров в DLL для повышения :: bind'ed - PullRequest
0 голосов
/ 18 июля 2010

У меня есть DLL, которая имеет функцию, которая принимает указатель на функцию, преобразует ее в boost :: function.Затем он сохраняется и вызывается изнутри DLL.

Я хочу добавить функцию в DLL для обработки функций-членов аналогичным образом.Я знаю, что мне нужно использовать boost :: bind, чтобы обернуть указатель на функцию-член и объект вместе.Я хочу сделать связывание на стороне DLL, хотя для того, чтобы EXE не требовал включения библиотек наддува.

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

Спасибо!

Ответы [ 3 ]

1 голос
/ 18 июля 2010

Может быть плохой идеей попытаться передать указатели на функции-члены в DLL, потому что они могут различаться по размеру в зависимости от определенных обстоятельств. (Некоторые подробности здесь .) Возможно, если вы всегда будете знать, что вы будете собирать обе части приложения одним и тем же компилятором, у вас все будет в порядке.

Что касается функции, я ожидаю, что она будет выглядеть примерно так (полностью непроверенный и не скомпилированный код):

typedef void(ObjectType::*OTMemberFn)();

boost::function<void (ObjectType o)> bind_mem_fn(ObjectType o, OTMemberFn mf)
{
    return boost::bind(mf, o);
}
1 голос
/ 15 декабря 2010

@Kylotan предупреждает вас, поэтому вы можете попробовать что-то вроде этого:

__declspec(dllexport) void store_mem_fn(void(Your_class::*mem_fn)(void), Your_class& instance)
{
    std::vector<boost::function<void(void)> > container;
    container.push_back(boost::bind(mem_fn, instance));
}
0 голосов
/ 18 июля 2010

Не является ли Boost открытым исходным кодом? Если это так, загляните в буст-код, узнайте, как это делается, и заново внедрите его самостоятельно, без зависимости.

...