代码之家  ›  专栏  ›  技术社区  ›  Michal Czardybon

将函数指针作为参数传递给dll函数并从dll内部调用它们是否安全?

  •  4
  • Michal Czardybon  · 技术社区  · 17 年前

    我想将一些(dll或not)函数指针作为参数传递给一些dll函数,并从dll内部调用它们。我想知道它是否安全,因为我发现了 http://publib.boulder.ibm.com/infocenter/zos/v1r10/index.jsp?topic=/com.ibm.zos.r10.cbcpx01/fpref.htm 那就是:

    在DLL代码中,假定函数指针指向函数描述符。函数指针调用首先通过取消对指针的引用来获取函数地址,然后再分支到函数项。当非dll函数指针传递给dll代码时,它直接指向函数项。试图通过这样的指针取消引用会产生一个未定义的函数地址。随后对未定义地址的分支可能会导致异常。

    此规则是否也适用于Visual Studio和其他编译器?

    我要做的正是解决各种DLL和非DLL函数之间的内存分配和释放问题。我的想法是在某些初始化(例如,初始化(&malloc&free))中将两个函数指针(用于公共分配和释放函数)传递给每个dll,然后使用这些公共的、因此始终兼容的函数进行所有内存管理。

    2 回复  |  直到 17 年前
        1
  •  6
  •   anon    17 年前

    这不是真的。dll代码与非dll代码处理函数指针的方式完全相同。如果不是这样,就不能在dll中使用标准库函数,如qsort()(需要函数指针参数)。

        2
  •  5
  •   Benoit    17 年前

    将函数指针传递到dll已执行了几代。

    在GUI编程中使用的所有回调函数(例如进度条更新)都使用函数指针。

    使用win32进行开发时,是否有理由使用指向malloc/free的函数指针?为什么你不直接使用malloc/free?

    这就是我过去一直这样做的。但这并不能保证这是正确的方式。
    事实上,你可能会认为这是最糟糕的方法。)