【发布时间】:2009-03-17 10:39:29
【问题描述】:
我想将一些(不管是否是 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,然后使用这些通用且始终兼容的函数进行所有内存管理。
【问题讨论】:
-
引用的文章不适用于 Windows。导出函数只在 Win16 中才有。
标签: dll memory-management function-pointers