我想将一些(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,然后使用这些常见且始终兼容的函数进行所有内存管理。