C++ 如何在我的c+中使用dlsym获得的我的c风格函数+;程序

C++ 如何在我的c+中使用dlsym获得的我的c风格函数+;程序,c++,c,dlopen,dlsym,C++,C,Dlopen,Dlsym,所以基本上我不知道你在使用这个函数“createLib”我似乎无法使用它: auto createLibFunc = dlsym(lib, symbol.c_str()); 这是可行的,我用dlopen打开了动态加载的lib,我可以用dlsym获得函数符号,但我不知道如何使用uanch ceateLibFunc();在我获取它之后,它应该是类似createLibFunc()的东西;那么容易不?以下是createLibs函数: extern "C" IDisplayModule *createL

所以基本上我不知道你在使用这个函数“createLib”我似乎无法使用它:

auto createLibFunc = dlsym(lib, symbol.c_str());
这是可行的,我用dlopen打开了动态加载的lib,我可以用dlsym获得函数符号,但我不知道如何使用uanch ceateLibFunc();在我获取它之后,它应该是类似createLibFunc()的东西;那么容易不?以下是createLibs函数:

extern "C" IDisplayModule *createLib()
{
    return new LibNcurses();
}

IMHO最具可读性的解决方案是创建类型别名:

extern "C" typedef IDisplayModule* CreateLibT();
然后可以使用它声明函数指针的类型:

auto createLibFunc = reinterpret_cast<CreateLibT*>(dlsym(lib, symbol.c_str()));
auto-createLibFunc=reinterpret_cast(dlsym(lib,symbol.c_str());

您认为
auto
将从
dlsym()
中推断出返回值的类型是什么?我认为这是你不能明智地使用
auto
的地方。我想,你需要一个
重新解释\u cast
,除非它是
静态\u cast
。而
createLibFunc
的类型需要是
IDisplayModule*(*createLibFunc)(
)。我不认为
extern“C”
链接会影响指针类型,但我愿意学习其他方法。@JonathanLeffler:“两个具有不同语言链接的函数类型是不同的类型,即使它们在其他方面相同。”§9.11/p1。另请参见p4中的
extern“C”typedef
示例。(<代码> TyPulf< /Calp>在这种情况下非常有用)。@ JONADENEL LIFFER如果类型包含函数类型,那么函数的签名将被C++所损坏。