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

2024-04-07

我想将一些(无论是否为 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(使用前将#替换为@)

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

  • C# DLL 运行时错误 - 构建、运行,但在尝试使用 DLL 函数时抛出未处理的异常

    我正在尝试编译所示的示例项目here http www ftdichip com Support SoftwareExamples FTDIChip ID htm对于 C 它必须转换为 VS2010 但效果很好 它会构建 运行 但当它尝试访
  • VS2010 .NET 内存分析 - 非常慢

    运行 VS2010 的 NET 内存分配分析需要很长时间才能完成 该程序本身运行了大约 3 分钟并生成了 35GB 的内存分配 探查器的输出文件约为 28GB 报告分析流程接管三个小时 在具有 8GB RAM 的双 Xeon 上 即可完成
  • 如何在我的项目中使用 FFTW DLL 导入库 .lib 作为静态 .lib?

    我了解 C 和编译小型插件 始终基于类似且布局的工作流程 虽然目前我需要将最新版本的 FFTW 编译成静态库 或者从编译版本中获取它 这应该会容易得多 但这给了我一个非常困难的时间 可能是因为我不知道编译的来龙去脉 请注意 我正在使用 Vi
  • 无法从 ASP.NET 调用 DLL

    您好 我有一个 C Dll 它将与 cobol 应用程序交互 我们想通过互联网将数据发送到cobol 所以我创建了一个 C DLL 它将调用 C DLL 当我执行控制台应用程序时 它工作正常 但是当我尝试从 ASP NET 调用相同的 DL
  • 如何真正释放 Linux 中的大页面以供新进程使用?

    真的找不到太多关于此的信息 希望有人可以提供帮助 我正在假脱机使用 100GB java 堆作为大数据缓存 为了避免与文件系统缓存等内容发生冲突 并且因为它通常性能更好 我将其分配在大页面中 我保留了 51 200 x 2MB 大页面 一切
  • 不允许从函数返回函数。我怎么能?

    8 3 5 8 Functions dcl fct says 函数的返回类型不得为 类型数组或function 尽管它们可能具有指针类型的返回类型或对此类事物的引用 为什么规则这么明确 是否有某种语法甚至允许返回函数而不是函数指针 我是否误
  • 演员邮箱溢出。斯卡拉

    我目前正在与 scala 的两位演员合作 一 producer 产生一些数据并将其发送到parcer 生产者发送一个HashMap String HashMap Object List Int 通过消息 以及this标记发件人 parcer
  • 函数类型有什么用?

    鉴于以下两个typedefs typedef void pftype int typedef void ftype int 我明白第一个定义pftype作为指向一个函数的指针 该函数接受一个int参数并且不返回任何内容 第二个定义ftype
  • C++/CLI 在运行时显式加载托管 DLL(相当于非托管的 LoadLibrary)

    问题一 有没有办法在 C CLI 中在运行时而不是在编译时显式加载库 目前我在编译时使用 NET 添加引用 我想显式加载托管 dll NET 中是否有 LoadLibrary 的等效项 Update 感谢兰多夫 Assembly LoadF
  • 如何在 Visual Basic DLL 和 C++ DLL 之间创建隔离/免注册 COM?

    我必须在 C DLL 中使用 VB COM DLL 我弄清楚了如何从 C DLL 访问 VB COM DLL 并且它可以工作 现在我遇到了一个问题 我必须使用隔离的 COM 免注册 COM 因为我无法在必须使用它的每台 PC 上注册 DLL
  • 如何安全地将对象(尤其是 STL 对象)传入和传出 DLL?

    如何将类对象 尤其是 STL 对象 传入和传出 C DLL 我的应用程序必须以 DLL 文件的形式与第三方插件交互 并且我无法控制这些插件是使用什么编译器构建的 我知道 STL 对象没有保证的 ABI 并且我担心这会导致我的应用程序不稳定
  • Javascript 函数指针,以参数作为函数中的参数

    不确定标题的措辞是否正确 或者是否有更好的表达方式 但我认为还可以 无论如何 到目前为止我了解以下内容 a b a b c foo 其中 foo 是在其他地方定义的函数 不接受任何参数 只会导致函数 a b 使用上述参数运行 然后可以在函数
  • SidBySide:3rd Party Dll 指的是 MSVCR80.DLL 的两个版本

    我们包含了一个 3rd Party lib DLL 最近在安装时造成了很多麻烦 使用依赖步行者 http www dependencywalker com 我们发现dll本身引用了两个不同版本的 MSVCR80 DLL Version 8
  • 在java程序中使用c++ Dll

    我正在尝试使用System LoadLibrary 使用我用 C 编写的一个简单的 dll UseDllInJava java import com sun jna Library import com sun jna Native imp
  • 在 matlab 代码中使用 dll 文件

    我需要使用 Matlab 中由 dll 文件定义的函数 我有一个例子 那个家伙将 dll 转换为 mexw32 文件 但我知道我是如何做到这一点的 我尝试使用加载库但它没有创建任何文件 我怎样才能做到这一点 loadlibrary http
  • Objective C (iphone) 关于发布的问题

    如果我创建一个视图 并将其添加为子视图并将其添加到数组中 是否必须释放它两次 UIView cat UIView alloc initWithFrame someFrame self view addSubview cat self ani
  • 内存调试:如何获取 Linux 用户空间/内核空间中的锁定页面信息

    有什么方法可以获取Linux用户空间 内核空间中的锁定页面 虚拟内存页面 信息 我想了解详细信息 例如 谁锁定了页面 有多少页被锁定 进程名称 谁锁定了页面 还让我了解内核空间和用户空间的内存调试技术 对于内存中的每个页面 都会为其分配标志
  • Cython:如何在结构中公开 void* 和函数指针?

    我有一个 C 标头 typedef struct
  • C++ 中的软(不是:弱)引用 - 这可能吗?有实施吗?

    在 C 中我正在使用boost shared ptr and boost weak ptr自动删除不再需要的对象 我知道这些与引用计数一起工作 在 Java 中 内存由垃圾收集器管理 它将内置对象引用视为strong WeakReferen
  • 在Windows 7上安装curl后缺少libcurl-4.dll

    按照这个人的安装curl后指示 https stackoverflow com a 28757477 1186038 除了第 2 步 已安装Win64 OpenSSL v1 0 1u 轻型相反 因为下载页面中缺少版本 k http slpr

随机推荐

  • 跨平台 Windows / OS X 开发,具有大量现有代码库

    对于使用 MFC 和 WinAPI 用 C 编写的复杂应用程序 有大量现有代码库 需要将其移植到 Mac OS X 理想的解决方案是在不同平台之间拥有尽可能多的通用代码 尤其是诸如业务之类的代码逻辑 GUI 可能会有所不同 具体取决于跨平台
  • 在 64 位 C++ 程序中使用 32 位库

    有什么方法可以在 64 位系统中使用旧的 32 位静态库 a 吗 没有机会获得这个旧库的源代码来再次编译它 我也不想在 gcc 中使用 m32 因为该程序使用许多 64 位库 谢谢 这完全取决于您运行的平台 例如 PowerPC 上的 OS
  • 调试 CoreGraphics/MapKit 中的崩溃

    当我的应用程序在 iPhone 上运行时 我遇到间歇性崩溃 所有崩溃都是相同的 并且以某种方式涉及 MKMapView Overlays MKCircleViews 来自典型的 iPhone 4s 崩溃报告 报告标题 Hardware Mo
  • 如何在 SMPP 中正确表示消息类别

    我目前正在尝试弄清楚 sms 类如何在 SMPP 中正确表示 然而 我现在对标准及其文档完全感到困惑 在普通短信中我们有 Class0 Flash短信 显示在显示屏上 Class1 普通短信存储在 SIM 卡上或设备内部 查看SMPP规范
  • 如何忽略 CMakeLists.txt 中单个 CMake 命令的错误?

    我有一个项目CMakeLists txt尝试读取可能存在或不存在的文件 文件丢失不是问题 脚本可以处理这两种情况 如果我们可以检测到已知的 Linux 发行版 这将用于稍微调整编译环境 file READ etc redhat releas
  • FragmentTransaction.remove 没有效果

    我的要求非常简单 我有一个按钮可以逐个片段地替换片段 这听起来很容易并且几乎可行 最大的问题是旧片段没有被删除 新片段被放置在旧片段的前面 并且它们在我的布局中 生活 在一起 代码 FragmentManager fragMgr a get
  • Xamarin Forms 4.1.0:找不到方法:void .ResourceLoadingQuery.set_Instance(object)

    SOLUTION 解决方案在这里 https github com xamarin Xamarin Forms issues 6787 或者只需确保解决方案中使用 Xamarin Forms 的所有项目均已更新 原始问题 从 4 0 0 4
  • Python functools.lru_cache 驱逐回调或等效函数

    是否可以定义回调functools lru cache当一个项目被驱逐时 在回调中还应该存在缓存的值 如果没有 也许有人知道一个支持驱逐和回调的轻量级类似字典的缓存 我将我使用的解决方案发布出来以供将来参考 我使用了一个名为cachetoo
  • 我可以将多行文本的每一行换行到一个跨度中吗?

    我一直在试图弄清楚如何做到这一点 如果可能的话 并且画了一个空白 我有一些文本将换行为多行 我想检测每一行 并将其包装在一个跨度中 最后 我想为循环数组中的每个范围分配一个类 例如 div I have some text that wra
  • jquery 上有循环 next() 吗?

    这是我的代码 div class container div class prova 1 div div class prova 2 div div class prova 3 div div 我想每 500 毫秒获取每个 div 的内容
  • angular2 @input - 更改检测[重复]

    这个问题在这里已经有答案了 有没有办法监听 Input 的变化 在下面的示例中 每当 inputData 值更改时我希望收到通知 Input inputData InputData 是的 你可以使用OnChanges生命周期事件 Input
  • 自定义按钮上的自定义属性不显示

    我扩展了 Button 小部件 使其能够应用多个自定义属性 其中一个属性是颜色滤镜 我在创建按钮时尝试将其应用于其背景 这是行不通的 请参阅下面的屏幕截图和代码 我尝试在同一代码位置直接设置背景颜色 它确实改变了背景颜色 但这不是我需要的
  • 将多个 DbContext 与通用存储库和工作单元结合使用

    我的应用程序变得越来越大 到目前为止我只有一个MyDbContext其中包含我的应用程序中所需的所有表格 我希望 为了概述 将它们分成多个DbContext like MainDbContext EstateModuleDbContext
  • gruntjs 加载外部配置

    嘿 咕噜大师们 我想将外部配置文件加载到 grunt 中 以便我可以执行以下操作 grunt dev homepage 它会加载homepage config json 然后运行watch grunt dev contact 它会加载con
  • Python 中 doxygen 风格文档字符串的 Vim 语法高亮显示

    我开始与doxygen生成我的 Python 代码的文档 我用doxypy过滤器来预处理 Python 文档字符串 我的目标是在 Python 中对 doxygen 注释进行良好的语法突出显示 当写我的mainpage在专用的 dox 文件
  • RewriteMap 激活

    如何在apache中激活RewriteMap 当我重新启动 apache 时 我尝试在 httpd 配置中运行 rewritemap 它说 此处不允许 RewriteMap 我尝试用谷歌搜索并访问apache 但找不到激活它的方法 有人知道
  • Bash 读取命令在循环外不起作用

    我一定错过了一些关于 Bash read 命令的非常基本的东西 在 shell 提示符下 无法将三个输入字段分配给相应的变量 echo a b c read x1 x2 x3 echo x1 x2 x3 这虽然有效 echo a b c w
  • Objective C sqlite3问题

    我发现在 iPhone 应用程序中更新 插入表格时遇到问题 因为我有一个文本列 当该文本包含 符号时 事情就会变得混乱 处理这个问题的最佳方法是什么 在使用带有撇号的字符串之前我应该 检查吗 有没有一种快速添加格式的方法 可以在每个撇号前面
  • actionPerformed 中的线程睡眠

    我正在尝试制作一个有 3 个按钮的小程序 所有按钮都是白色的 按下第一个按钮 带有文字 开始 将使第二个按钮变为橙色 3 秒钟 然后 在此时间之后 它将再次变为白色 而第三个按钮将永久变为绿色 然而 在我的下面的代码中 我在实现这一点时遇到
  • 将函数指针作为参数传递给 dll 函数并从 dll 内部调用它们是否安全?

    我想将一些 无论是否为 dll 函数指针作为参数传递给一些 dll 函数 并从 dll 内部调用它们 我想知道它是否安全 因为我找到了有关的信息http publib boulder ibm com infocenter zos v1r10