Сегодня пришло любопытное событие, которое заставило меня задуматься о том, как на самом деле работает объектная модель в Delphi.
Корпус:
Мы импортировали службу SOAP, которая предоставляет несколько методов, принимая объекты в качестве параметров. Delphi генерирует классы / интерфейсы, которые мы используем для связи с сервисом soap, и все объекты, используемые в качестве параметров, наследуются от TRemotable.
По разным причинам мы поместили всю связь с сервисом мыла в dll.
Затем мы попытались создать объекты, которые должны быть отправлены в основной исполняемый файл, и передать их в библиотеку для сериализации и отправки.
Теперь это не сработало, но дало исключение, которого я не ожидал.
В нем сказано, что объект, который мы пытаемся отправить в сервис мыла, должен наследоваться от TRemotable, но это так. Изучив объект, мы увидим, что класс является импортированным классом из wsdl и что родительский класс действительно TRemotable.
Сборка с пакетами решает эту проблему.
Вопрос:
Это так, что класс, определенный в исходном файле, совместно используемый двумя библиотеками, заканчивается во время выполнения как разные классы? Если так, то почему?
Насколько я знаю, нормально передавать объекты между библиотеками. Как тогда обеспечивается строгая типизация и в какой степени экземпляры объектов будут совместимы друг с другом?