今日、奇妙なケースがあり、デルファイのオブジェクトモデルが実際にどのように機能するかを考えさせられました。
ケース:
オブジェクトをパラメーターとして使用して、いくつかのメソッドを公開するSOAPサービスをインポートしました。Delphiは、soapサービスとの通信に使用するクラス/インターフェイスを生成し、パラメータとして使用されるオブジェクトはすべてTRemotableから継承します。
さまざまな理由で、soapサービスとのすべての通信をdllに入れました。
次に、メインの実行可能ファイルで送信する必要のあるオブジェクトをインスタンス化し、シリアル化して送信するためにライブラリに渡そうとしました。
さて、それはうまくいきませんでしたが、私が予期していなかった例外を与えました。
せっけんサービスに送信しようとしているオブジェクトは、TRemotableから継承する必要があると言われていますが、継承しています。オブジェクトを調べることにより、クラスがwsdlからインポートされたクラスであり、親クラスが実際にTRemotableであることがわかります。
パッケージを使用してビルドすると、この問題が解決します。
質問:
2つのライブラリ間で共有されるソースファイルで定義されたクラスが、実行時に異なるクラスとして終了するようにするためですか?もしそうなら、それはなぜですか?
私の知る限り、ライブラリ間でオブジェクトを渡しても問題ないはずです。では、どのようにして強い型付けが保証され、オブジェクトインスタンスはどの程度相互に互換性がありますか?