C “如何编写函数指针”;指向;扩展到实际函数的宏?

C “如何编写函数指针”;指向;扩展到实际函数的宏?,c,function-pointers,dynamic-linking,dlopen,C,Function Pointers,Dynamic Linking,Dlopen,我在库lib中有一个函数,所以我正在使用dlopen()动态链接到我的应用程序 lib.h myapp.c void (*DBG_PRINT_ptr)( unsigned char logLevel, const char *programName, const char *format, ... ); void *handle = NULL; bool ret

我在库
lib中有一个函数,所以我正在使用
dlopen()动态链接到我的应用程序

lib.h

myapp.c

void (*DBG_PRINT_ptr)( unsigned char logLevel,
                 const char     *programName,
                 const char     *format,
                 ... );

    void *handle = NULL;
    bool ret = RESULT_SUCCESS;

    /* Open Shared Lib into the same Process */
    /* LDRA_INSPECTED 496 S */
    handle = dlopen(lib.so, RTLD_NOW);
    if (NULL == handle)
    {
        /* fail to load the library */
        LLOG_error(" dlopen Error to open handle: %s\n", dlerror());
        ret = RESULT_FAILURE;
    }
        if(RESULT_SUCCESS == ret)
    {
              DBG_PRINT_ptr = dlsym(handle, "DebugPrint");

        if( DBG_PRINT_ptr  == NULL)
        {
           LLOG_error("Failed in DBG_PRINT dlsym(): Err:%s", dlerror());
           dlclose(handle);
           ret = RESULT_FAILURE;
        }
   }
(void)DBG_PRINT_ptr  ("loglevel1","dd","printval");
但我在运行时出错了
在DBG_PRINT dlsym()中失败:错误:找不到符号


对于以下要求,定义函数指针的正确方法是什么。

无法使用函数指针指向宏。函数指针只能指向函数

但是,您可以有一个指向宏调用的函数的指针。像这样:

auto fptr = &DebugPrint;

这意味着动态库中没有该名称的符号

一个典型的错误是尝试加载具有C++语言链接的函数。此函数的符号将被损坏,并且与函数名称不匹配

函数可以声明为具有与语言链接声明的C链接:

extern "C"

尝试将您的
DebugPrint
函数声明为
extern“C”
我看不出宏与您的问题有什么关系,因为您没有在任何地方使用它。是的,您的问题的标题非常误导人。这是否回答了您的问题?请注意C++允许函数和运算符重载。某些链接器使用名称混乱将此重载函数映射到C样式的函数名。标题错误代码请勿尝试在dll中访问宏。因为我使用的是C语言,所以无法对函数使用auto关键字pointer@maheshhegde是的,其他语言是不同的。我的答案是关于C++。@ MasHeHeGeD:如果你不想要C++答案,不要使用标签。我帮你取下来了。
Symbol not found
extern "C"