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

时间:2009-03-17 10:39:29

标签: dll memory-management function-pointers

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

2 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:5)

将函数指针传递给DLL已经完成了几代。

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

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

这就是我过去总是这么做的。并不是说这是正确的方式 事实上,你可能会认为这是最糟糕的方式:)