我想将一些(无论是否为 dll)函数指针作为参数传递给一些 dll 函数,并从 dll 内部调用它们。我想知道它是否安全,因为我找到了有关的信息http://publib.boulder.ibm.com/infocenter/zos/v1r10/index.jsp?topic=/com.ibm.zos.r10.cbcpx01/fpref.htm http://publib.boulder.ibm.com/infocenter/zos/v1r10/index.jsp?topic=/com.ibm.zos.r10.cbcpx01/fpref.htm that:
在DLL代码中,假设函数指针指向函数描述符。函数指针调用首先通过解引用指针获得函数地址;然后,分支到函数入口。当非 DLL 函数指针传递给 DLL 代码时,它直接指向函数入口。尝试通过此类指针取消引用会产生未定义的函数地址。随后分支到未定义的地址可能会导致异常。
此规则是否也适用于 Visual Studio 和其他编译器?
我想做的正是解决各种dll和非dll函数之间的内存分配和释放问题。我的想法是在某些初始化(例如Initialize(&malloc, &free))中将两个函数指针(用于公共分配和释放函数)传递给每个dll,然后使用这些公共且始终兼容的函数进行所有内存管理。
这不是真的。 DLL 代码对待函数指针的方式与非 DLL 代码完全相同。如果情况并非如此,则无法在 DLL 中使用标准库函数,如 qsort()(需要函数指针参数)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)