代码之家  ›  专栏  ›  技术社区  ›  yozey

将指向方法的指针作为记录的成员传递是否安全?

  •  0
  • yozey  · 技术社区  · 16 年前

    我想在一个dll中实现一个函数,该函数接受一个记录作为参数,而这个记录作为几个包含回调例程指针的字段。这样安全吗?

    3 回复  |  直到 16 年前
        1
  •  3
  •   Rob Kennedy    16 年前

    是的,有一个指向保存其他指针的记录的指针是完全安全的。

    你的头衔提到 方法 但是。DLL很少请求方法指针,因为方法指针只存在于Delphi和C++Builder中。期望其他工具能够使用它们的DLL将请求普通的函数指针,因此请注意方法指针是 不 与指向独立子例程的指针兼容。如果您尝试混合它们,编译器通常会停止工作,但类型转换可以消除该错误消息。作为经验法则,如果您键入一个函数指针或方法指针,则说明您做了一些错误的事情。如果类型声明和函数声明是正确的,则不需要类型转换。

    同样,如果您使用 @ 运算符若要创建函数指针或方法指针,您可能做错了。在大多数情况下,编译器可以自动检测和分配兼容的代码指针,而不必告诉它有指针。使用 @ 可能会抑制Delphi的某些类型检查。

        2
  •  3
  •   Cade Roux    16 年前

    我不明白为什么。我认为过程/方法指针的所有常见问题都适用,因此如果对象是方法指针,它就需要存在。

        3
  •  0
  •   Serguzest    16 年前

    这是安全的,但有两个问题您应该注意:

    声明为局部变量的记录存储在堆栈中,当函数返回时,这些记录将消失。您应该考虑使用新的/dispose函数在堆上分配/释放它们。

    如果DLL将由Delphi之外开发的程序使用(甚至可能是Delpi的不同版本),则必须使用打包记录。