Я работаю с исполняемым файлом, который включает DLL. Для моего теста я объединил код в один исполняемый файл. Я работаю с Visual Studio 2008 и Boost 1.43. Я пытался исследовать это, но не нашел четкого ответа. Спасибо за помощь.
В моем main.h:
#include <string>
//These are normally defined in a seperate DLL
typedef std::string Typedef_func(const std::string & title);
void Register_My_Typedef(Typedef_func*);
//-------------------------------------------
class myClass
{
public:
std::string func_one(const std::string & title);
Typedef_func _test;
void run();
};
В моем main.cpp:
#include "main.h"
#include <boost/bind.hpp>
std::string workingFunc(const std::string & title)
{
return "";
}
int main(int argc, char* argv[])
{
myclass* example;
example->run();
Register_My_Typedef(&workingFunc);//This works.
return 0;
}
void myClass::run()
{
//I want to point a Typedef_func* in a DLL to call myclass::func_one
Typedef_func* tf = boost::bind(&myClass::func_one, this, "test"); //This does not.
Register_My_Typedef(tf);
}
std::string myClass::funcOne(const std::string & title)
{
return "";
}
void Register_My_Typedef(Typedef_func* passedIn)
{
//Points the pointer in the DLL to passedIn
}
Логика DLL работает нормально, когда Register_My_Typedef вызывается для функции, не входящей в класс, но возможно ли ее вызвать из класса? Когда я пытаюсь скомпилировать этот код, он возвращает:
Когда я пытаюсь скомпилировать в Windows XP с VS2008, я получаю:
Ошибка C2440: «инициализация»: невозможно преобразовать из
'boost :: _ bi :: bind_t' в 'Typedef_func (__cdecl *)' с
[
R = станд :: строка,
F = повышение :: _ ммк :: MF1,
L = повышение :: _ би :: List2, форсирует :: _ би :: значение>
]
Нет оператора преобразования, определенного пользователем, который мог бы выполнить это
преобразование или оператор не может быть вызван.