gpt4 book ai didi

c# - 接口(interface)继承和转换

转载 作者:太空狗 更新时间:2023-10-30 00:58:11 29 4
gpt4 key购买 nike

我创建了一个从另一个 (COM) 接口(interface)继承的接口(interface):

public interface IDTSComponentMetaData : IDTSComponentMetaData90 { }

这就是它所做的一切。

这背后的原因是,根据我使用的 SQL Server 版本,基础可能是 IDTSComponentMetaData90 (2005) 或 IDTSComponentMetaData100 (2008)。我不想在代码中有条件地编译对 IDTSComponentMetaData90/IDTSComponentMetaData100 的每个引用,而是使用版本中立的接口(interface),它将简单地包装正确的真实接口(interface)。

问题是 SSIS 在一个关键点向我传递了一个对象到 native 接口(interface),我需要将它转换到我的包装器接口(interface):

#if SQL2005
public void Initialize(IDTSComponentMetaData90 c,IServiceProvider s) {
#elif SQL2008
public void Initialize(IDTSComopnentMetaData100 c,IServiceProvider s) {
#endif
m_ComponentMetaData = (IDTSComponentMetaData) c;
m_ServiceProvider = s;
}

编译没有问题,但在运行时,我收到“无法将类型为‘System.__ComObject’的 COM 对象转换为接口(interface)类型‘MyNameSpace.IDTSComponentMetaData’”。此操作失败,因为 IID 为“{483E01E7-001C-35E4-Ac9f-4B0C1B81E409}”的接口(interface)的 COM 组件上的 QueryInterface 调用因以下错误而失败:不支持此类接口(interface)(HRESULT 异常:0x80004002 (E_NOINTERFACE)) .

我做的完全错了吗?

最佳答案

您有什么理由不简单地根据 SQL Server 版本为接口(interface)添加别名?

#if SQL2005
using IDTSComponentMetaData = IDTSComponentMetaData90;
#elif SQL2008
using IDTSComponentMetaData = IDTSComopnentMetaData100;
#endif

关于c# - 接口(interface)继承和转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3418994/

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