当前位置:  开发笔记 > 程序员 > 正文

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

如何解决《将函数指针作为参数传递给dll函数并从dll内部调用它们是否安全?》经验,为你挑选了2个好方法。

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



1> 小智..:

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



2> Benoit..:

将函数指针传递给DLL已经代代相传.

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

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

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


"你为什么不直接使用malloc/free?" - 因为在不同DLL中的内存'malloced'上的一个DLL中使用'free'通常会导致崩溃.
推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有