Мой проект (какой-то процессор обработки) разделен на 2 библиотеки: один с декларациями интерфейса и один с функциональностью. Обычно проект используется внешним проектом Delphi через COM-технологию.
Давайте скажем, что моя программа нарезает фрукты. Внешняя программа delphi создает объект Fruit и заполняет его свойства: weight (int), Name (string) и ProgressUpdater (типа IProgressUpdater, который объявлен во второй dll с интерфейсами). После этого exst-программы создатель Slicer делает Slicer.AddFruit(newFruit) и вызывает Slicer.Slice().
Ничего особенного. В реальной жизни проект delphi - это Outlook addin. Но вот проблема: иногда некоторые дополнения VSTO заставляют Outlook работать в режиме "теневых копий", поэтому при запуске проекта delphi и создании объекта Slicer наша сборка С# будет помещена в папку temp, и сборка будет создана с этим локальным путем. Ну... это все еще не проблема. Но проблема в том, что проект delphi создает newFruit, а затем передает объект ProgressUpdater, в моей сборке Slicer я не могу получить внешний ProgressUpdater: "Возвращаемый аргумент имеет недопустимый тип", но все же может получить поле с простыми типами (вес, имя).
Это происходит только тогда, когда включен режим shadowCopyFiles. Поэтому я предполагаю, что внешние сборки ProgressUpdater и сборка Slicer размещены в разных местах, поэтому их нельзя передать. Мой вопрос: как избежать того, чтобы моя dll была "теневой копией"? Или есть какое-то другое решение?