今天遇到一个奇怪的案例,这让我想到了 delphi 中的对象模型是如何工作的。
案子:
我们导入了一个 SOAP 服务,它公开了几个方法,将对象作为参数。Delphi 生成我们用来与soap 服务通信的类/接口,并且用作参数的对象都继承自TRemotable。
由于不同的原因,我们将所有与soap服务的通信都放在了一个dll中。
然后,我们尝试实例化应该在主可执行文件中发送的对象,并将其传递给库以进行序列化和发送。
现在,这不起作用,但给出了一个我没想到的异常。
它说我们试图发送到soap服务的对象必须继承自TRemotable,但确实如此。通过检查该对象,我们可以看到该类是从 wsdl 导入的类,并且父类确实是 TRemotable。
使用包构建解决了这个问题。
问题:
是不是一个在源文件中定义的类在两个库之间共享,最终在运行时成为不同的类?如果是这样,那是为什么?
据我所知,在库之间传递对象应该没问题。那么,如何确保强类型化,以及对象实例在多大程度上相互兼容?