0

我想知道程序执行过程中用户(初学者)可以在事件通知下实现的情况,例如:

TNotifySomething : procedure (const param: TObject) of object;

1 - 此事件可能由 Dll 实现?我必须以某种方式发布?
2 - 我可以通过引用将程序执行期间实例化的对象传递给 dll 方法吗?
3 - 在多线程环境中,如果我通过 2 个或更多线程调用事件(在 dll 中定义),它会给我带来任何麻烦,比如访问冲突?
4 - 有人知道我可以读到的好书或论文吗?

PS:这可以在Delphi 6中完成吗?

4

1 回答 1

1

1) 没有。Google for DLL vs BPL。这个话题从 1997 年开始反复出现。BPL 是针对 Pascal 的。DLL 适用于 Windows。Windows 中没有对象。但是有 COM 接口(IUnknown 与 COM 定义的类型,支持您的 Pascal 类型,不存在事件回调)

您还可以尝试“JCL except_stack_list 可以为 dll 工作吗?”线程在http://newsportal.delphi-jedi.org/thread_frameset.php?group=jedi.jcl

2)通过IUnkown和COM标准化的数据类型。除此之外,您覆盖编译器的类型安全,这意味着您应该实现并提供自己的 pascal-to-binary 安全层。

3)取决于您的代码,包括被调用者和调用者。如果两者都是可重入的,那么它们是。如果有人不是 - 它会触发错误。

4)取决于你想要达到什么。

如果您想体验 DLL:任何汇编程序书籍,然后 Delphi 手册关于在 asm 而不是 Pascal 中实现过程,特别是关于所有这些数据类型在不同 Delphi 版本中的二进制表示。如果你否认 Delphi 标准的类型安全,那么你需要提供你自己的。

如果你想体验 COM,那么任何关于 COM 的书和关于实现和使用 COM 对象的 Delphi 手册。

如果您想体验 BPL,请阅读有关运行时包的 Delphi 手册。他们是德尔福的一等公民,额外的书籍是可选的。

于 2013-03-18T08:55:24.890 回答