【问题标题】:exporting typdef function pointer to dll将 typdef 函数指针导出到 dll
【发布时间】:2015-05-02 17:05:02
【问题描述】:

我正在做一个练习,它给了我一个头文件,它声明了几个函数,并要求我创建一个动态加载的 DLL,它可以导出这些函数。对我来说困难的部分是头文件将函数声明为函数指针,这让我很困惑。以下是如何删除一个:

typedef int32_t* (__stdcall* T_func)(int32_t* a);

说明说我的 DLL 应该导出函数“func”,我可以这样做,但我希望只要 DLL 实现接口(如上所示)。

我无法创建函数 T_func,因为它是 typedef,我无法创建名为 func 且类型为 T_func 的函数。我很困惑我应该如何根据他们给我的东西声明一个函数。创建一个名为 func 的函数,其输入和返回类型与 T_func 相同?

【问题讨论】:

    标签: c++ dll


    【解决方案1】:

    您只需在 DLL 中声明一个函数:

    int32_t* __stdcall func(int32_t* a);
    

    然后,在客户端代码中,您可以动态绑定:

    T_func pFunc = (T_func)GetProcAddress(hModule, "func");
    

    这就是 typedef 派上用场的地方。 DLL 代码不使用它。

    更新:您的问题被标记为 C++,您可能需要定义为 extern "C" 的函数,否则您将获得一个 C++ 错误名称。而且由于您可能正在使用 MS-Windows

    extern "C" {
    declspec(dllexport) int32_t* __stdcall func(int32_t* a);
    }
    

    【讨论】:

    • 我可以在我的函数定义周围加上 extern "C" 吗?此外,它似乎编译得很好,但用于测试 DLL 的 .exe 说它不是一个有效的模块。
    • 嘿,我也在做同样的练习,你知道这是为什么吗?
    猜你喜欢
    • 1970-01-01
    • 2021-07-04
    • 1970-01-01
    • 1970-01-01
    • 2021-11-27
    • 1970-01-01
    • 1970-01-01
    • 2020-07-22
    相关资源
    最近更新 更多