我创建了一个接口,我从另一个(COM)接口继承:
public interface IDTSComponentMetaData : IDTSComponentMetaData90 { }
Run Code Online (Sandbox Code Playgroud)
就是这样.
这背后的原因是,根据我正在使用的SQL Server版本,基数可能是IDTSComponentMetaData90(2005)或IDTSComponentMetaData100(2008).我不想在代码中有条件地编译对IDTSComponentMetaData90/IDTSComponentMetaData100的每个引用,而是使用版本中性接口,它将简单地包装正确的真实接口.
问题是SSIS在一个关键点将一个对象传递给本机接口,我需要将它转换为我的包装器接口:
#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;
}
Run Code Online (Sandbox Code Playgroud)
这没有问题编译,但在运行时,我得到一个'无法将类型'System .__ ComObject'的COM对象转换为接口类型'MyNameSpace.IDTSComponentMetaData'.此操作失败,因为对IID为"{483E01E7-001C-35E4-Ac9f-4B0C1B81E409}"的接口的COM组件的QueryInterface调用由于以下错误而失败:不支持此类接口(HRESULT异常:0x80004002(E_NOINTERFACE)) .
我做的完全错了吗?
你不是简单地根据SQL Server版本对接口进行别名的原因吗?
#if SQL2005
using IDTSComponentMetaData = IDTSComponentMetaData90;
#elif SQL2008
using IDTSComponentMetaData = IDTSComopnentMetaData100;
#endif
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
698 次 |
| 最近记录: |