我的项目(某种处理引擎)分为 2 个 dll:一个带有接口声明,一个带有功能。通常该项目由外部 Delphi 项目通过 COM 技术使用。
假设我的程序切水果。外部delphi程序创建Fruit对象并填充其属性:权重(int),名称(字符串)和ProgressUpdater(类型为IProgressUpdater,在带有接口的第二个dll中声明)。在这个exst程序创建器切片器之后,制作切片器.AddFruit(newFruit)并调用 Slicer.Slice()。
没什么特别的。在现实生活中的 delphi 项目是 Outlook 插件。但问题是——有时一些 VSTO 插件会使 Outlook 在“影子复制文件”模式下工作,因此当 delphi 项目启动并创建 Slicer 对象时,我们的 c# 程序集将被放入临时文件夹中,并且程序集将使用此本地路径创建。嗯......这仍然不是问题。但问题是当delphi项目创建newFruit然后传递ProgressUpdater对象时,在我的切片器程序集中我无法获取外部ProgressUpdater:“返回参数的类型无效”,但仍然可以获得简单类型(重量,名称)的字段。
它仅在 shadowCopyFiles 模式打开时发生。所以我的猜测是——外部 ProgressUpdater 的程序集和 Slicer 程序集放在不同的地方,所以不能通过。我的问题是如何避免我的 dll 被“影子复制”?还是有一些不同的解决方案?