我想在一个dll中实现一个函数,它接受一个记录作为参数,并将此记录作为一些字段来保存指向回调例程的指针。这会安全吗?
答案 0 :(得分:3)
我不明白为什么不。我认为过程/方法指针的所有常见问题都适用,因此如果它是方法指针,则对象需要存在。
答案 1 :(得分:3)
是的,拥有指向包含其他指针的记录的指针是完全安全的。
但是,您的标题提到了方法。 DLL很少请求方法指针,因为方法指针只存在于Delphi和C ++ Builder中。编写的DLL期望其他工具能够使用它们将请求普通函数指针,因此请注意方法指针不与指向独立子例程的指针兼容。如果你试图混合它们,编译器通常会发出警告,但是类型转换可以平息该错误消息。根据经验,如果你是一个类型转换函数指针或方法指针,你做错了。如果你的类型声明和你的函数声明是正确的,你就不需要输入。
同样,如果你使用@
运算符来创建函数指针或方法指针,那么你可能做错了。在大多数情况下,编译器可以自动检测和分配兼容的代码指针,而不会告诉它有指针。使用@
可能会抑制某些Delphi的类型检查。
答案 2 :(得分:0)
这是安全的,但您应该注意两个问题:
声明为局部变量的记录存储在堆栈中,当函数返回时它们会消失。您应该考虑使用new / dispose函数在堆上分配/处置它们。
如果DLL将由delphi以外的程序(或者甚至是不同版本的delpi)使用,则必须使用打包记录。