gpt4 book ai didi

c# - 是否可以从 .net 3.5 中的 COM 互操作返回 System.Type?

转载 作者:太空宇宙 更新时间:2023-11-03 10:57:07 25 4
gpt4 key购买 nike

我有一个类:

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 接口(interface)像这样编码到 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 对象。

关于c# - 是否可以从 .net 3.5 中的 COM 互操作返回 System.Type?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19076346/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com