使用DLL在Delphi中编程事件

时间:2013-03-18 03:30:48

标签: multithreading delphi dllimport delphi-6

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

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

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

P.S:这可以在Delphi 6中完成吗?

1 个答案:

答案 0 :(得分:1)

1)没有。 Google for DLL vs BPL。该主题自1997年以来一再出现。 BPL适用于Pascal。 DLL适用于Windows。 Windows中没有对象。但是有COM接口(IUnknown具有COM定义的类型,它们是您的Pascal类型的替代,事件回调不存在)

你也可以试试“{JCL在你的JCL上运行for_stack_list吗?”线程http://newsportal.delphi-jedi.org/thread_frameset.php?group=jedi.jcl

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

3)取决于你的代码,被叫者和来电者。如果两者都可以重新进行,那么它们就是。如果某个不是 - 它会触发错误。

4)取决于你想要实现的目标。

如果你想获得DLL的味道:任何汇编程序的书,那么关于在asm而不是Pascal中实现程序的Delphi手册,特别是关于不同Delphi版本中所有这些数据类型的二进制表示。如果您拒绝德尔福标准类型安全,那么您需要提供自己的类型。

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

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