delphi 是否不可能加载两个用不同NETCore版本构建的C# COM对象?

gtlvzcf8  于 2022-12-18  发布在  C#
关注(0)|答案(1)|浏览(125)

我有一个用** Delphi 编写的旧系统,它需要使用NETCore中内置的COM对象。当所有COM程序集都用NET 6构建时,一切都运行正常。当我尝试加载用NET 7编写的新COM对象时,问题开始了。这就是我得到的错误:
指定的框架“Microsoft.NETCore. App”(版本“6.0.0”,apply_patches=1,版本兼容性范围=minor)与以前加载的版本“7.0.1”不兼容。
在 Delphi 中,我使用
System.Win.ComObj中的CreateComObject函数来获取COM。
在C#中,我使用ComVisible(true),并且我还生成了一个
MyCSharpCom.comhost.dll并使用regsvr32**注册它。
我的问题是:为什么一个COM对象的负载与其他COM对象共享相同的NET框架?
有没有可能在保持相同体系结构的情况下修复这个问题,因为我不能强制第三方使用NET核心版本,第三方也将COM对象作为插件/扩展编写,以供 Delphi exe使用?

blpfk2vs

blpfk2vs1#

在任何给定进程中,一次只能加载一个.NET运行库示例。加载失败的原因是您正在进程中使用COM类,而这些COM类尝试将多个.NET运行库示例加载到同一进程。
您需要在进程外使用COM类。
如果COM类的供应商无法给予进程外版本的COM类,则需要使用.Net创建单独的进程外COM服务器应用程序,该应用程序将充当进程内COM类的代理。您可以决定仅为.Net 7 COM类创建代理。所以.net 6的COM类将继续使用,但.Net 7将通过进程外的代理使用。或者你可以为所有类创建代理,这取决于你的需要。
下面是如何在.Net中创建进程外COM类的示例:https://github.com/dotnet/samples/tree/main/core/extensions/OutOfProcCOM

相关问题