它是安全的传递函数指针作为参数传递给DLL函数,并从DLL内部调用它们?

StackOverflow https://stackoverflow.com/questions/653697

我想一些(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(例如初始化(malloc的,与游离)),然后执行使用这些常见,因此总是兼容功能的全部存储器管理

有帮助吗?

解决方案

这不是真的。 DLL的代码把完全相同的方式非DLL的代码的函数指针。如果这不是这种情况,一个不能使用标准库函数等的qsort()(其期望的函数指针参数)DLL中。

其他提示

传递函数指针到DLL已经世代进行。

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

在使用WIN32发展,是否有你想用函数指针的malloc的理由/免费的吗?为什么你不能简单地用malloc /免费直接?

这是怎么我以前一直做它。不,这保证它的正确途径。结果 事实上,你可以把它看作一个标志,这是最坏的可能的方式:)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top