我正在使用包含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
}
在不在类中的函数上调用Register_My_Typedef时,DLL逻辑工作正常,但是可以从类中调用它吗?当我尝试编译此代码时,它返回:
当我尝试使用VS2008在Windows XP中编译时,我得到:
错误C2440:'初始化':无法转换 'boost :: _ bi :: bind_t'改为'Typedef_func(__ cdecl *)' [ R =的std :: string, F =提振:: _ MFI :: MF1, L =升压:: _双向:: list2中,升压:: _双向::值GT; ]
没有可以执行此操作的用户定义转换运算符 转换,或者无法调用运算符。
答案 0 :(得分:-1)
答案是Typedef本身是静态成员函数的类成员&amp;行为与非静态不同,但最好是读取用户定义的类main的类功能。