gpt4 book ai didi

c++ - 函数指针调用不编译

转载 作者:行者123 更新时间:2023-11-30 03:04:53 25 4
gpt4 key购买 nike

我只是不明白,为什么第 22 行编译失败?

#include <stdexcept>
#include <dlfcn.h>
#include "Library.h"

int main(int argc, char *argv[])
{
try
{
void* libHandle = 0;

libHandle = dlopen("libExpandableTestLibrary.so", RTLD_LAZY);
if(!libHandle)
throw std::logic_error(dlerror());

std::cout << "Libary opened gracefully" << std::endl;

void* fuPtr = 0;
fuPtr = dlsym(libHandle, "createLibrary");
if(!fuPtr)
throw std::logic_error(dlerror());

Library* libInstance = static_cast<Library* ()>(fuPtr)();
// Tutorial: http://www.linuxjournal.com/article/3687
// Tutorial Code: shape *my_shape = static_cast<shape *()>(mkr)();
// Compiler error message: Application.cpp:22:56: error: invalid static_cast from type ‘void*’ to type ‘Library*()’
libInstance->Foo();

dlclose(libHandle);

} catch(std::exception& ex)
{
std::cerr << ex.what() << std::endl;
}
}

欢迎任何帮助如果您需要更多信息,请告诉我。

最佳答案

我认为 fuPtr 指向一个函数,该函数应该返回一个指向 Library 对象的指针(假设加载的名称是 "createLibrary")。

在这种情况下,包含您的类型转换的行需要如下所示:

Library* libInstance = reinterpret_cast<Library* (*)()>(fuPtr)();

关于c++ - 函数指针调用不编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8245880/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com