是否可以从 .net 3.5 中的 COM 互操作返回 System.Type
本文关键字:互操作 COM 返回 System Type 中的 net 是否 | 更新日期: 2023-09-27 18:33:16
我有一个类:
public class A
{
public void Test()
{
Type t = icom.ReturnType;
}
}
[ComVisible(true),
Guid("81C99F84-AA95-41A5-868E-62FAC8FAC263"),
InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface Icom
{
Type ReturnType { get; }
}
[ComVisible(true)]
[Guid("6DF6B926-8EB1-4333-827F-DD814B868097")]
[ClassInterface(ClassInterfaceType.None)]
[ComDefaultInterface(typeof(Icom))]
public class B : Icom
{
public Type ReturnType
{
get
{
return SomeAssembly.GetType("fullname");
}
}
}
这是否可以在 .NET 3.5 中以某种方式完成?我的目标是从B班返回System.Type
。在这种情况下,我收到一个错误,无法将System.__Com
投射到System.Type
。
据我所知,我将尝试解释正在发生的事情。您似乎具有以下调用(或传递的对象(工作流:.NET 4.x -> COM -> .NET 3.5。您的Icom
接口将封送到 COM 中,如下所示 (OleView(:
[
odl,
uuid(81C99F84-AA95-41A5-868E-62FAC8FAC263),
version(1.0),
dual,
oleautomation,
custom(0F21F359-AB84-41E8-9A78-36D110E6D2F9, "InteropTest.Icom")
]
interface Icom : IDispatch {
[id(0x60020000), propget]
HRESULT ReturnType([out, retval] _Type** pRetVal);
};
请注意_Type
它是托管Type
类的非托管代理,在 mscorlib.dll
中实现(类型 库 mscorlib.tlb
(。它的实现特定于每个 .NET 运行时版本。显然,它是由.NET Runtime v4.0创建的。
稍后,您将尝试将其取消封送回来,这次是在 .NET 3.5 端。如果是 v4.0,则会返回相同的托管Type
对象。但是,在 v3.5 中,您将获得一个未调整的System.__ComObject
,无法转换为 v3.5 托管Type
对象。