6

我想将一些(dll 与否)函数指针作为参数传递给某些 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函数之间的内存分配和释放问题。我的想法是在一些初始化(例如 Initialize(&malloc, &free))中将两个函数指针(用于常见的分配和释放函数)传递给每个 dll,然后使用这些常见且始终兼容的函数进行所有内存管理。

4

2 回答 2

7

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

于 2009-03-17T10:44:42.073 回答
6

将函数指针传递给 DLL 已经进行了几代人。

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

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

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

于 2009-03-17T11:03:02.717 回答