COM互操作,C#,Visual Studio 2010->;嵌入互操作类型

本文关键字:互操作 类型 gt 2010- Visual Studio COM | 更新日期: 2023-09-27 18:22:32

我的C#程序通过Nco3(sapnco.dll)访问SAP。该程序还需要与Delphi配合使用。我的一些方法从sapnco.dll返回类型:

public void IRfcTable table(...) { ... }

在Delphi中,这种方法显示为

function table(...): IUnknown { ... }

我想这个IUnknown是因为我的TLB不包括sapnco.dll;嵌入互操作类型=true";在Visual Studio中,但随后出现此错误:

错误Interoptypen aus Assembly";C: ''"können没有被定义为ImportedFromTypeLibAttribute属性或PrimaryInteropAssemblyAttribute属性属性。c: 。。。''sapnco.dll

(由于缺少某些属性,无法嵌入互操作类型)。

这是正确的路吗?如果是,将这些属性放在哪里?

COM互操作,C#,Visual Studio 2010->;嵌入互操作类型

sapnco.dll是一个.NET dll,因此它不公开给COM,因此您不能在COM环境中直接使用此类型。解决问题的方法是创建一个库,将sapnco.dll封装在COM公开的类中:

例如:

[ComVisible(true)]
public interface IComRfcTable
{
    public void DoSomething();
}
[ComVisible(true)]
public class ComRfcTable : IComRfcTable
{
    private _rfcTable; // object to wrap
    public ComRfcTable(IRfcTable rfcTable)
    {
        _rfcTable = rfcTable
    }
    public void DoSomething()
    {
        _rfcTable.DoSomething();
    }
}

然后你的方法必须像这样实现:

 public IComRfcTable table(...) { ... }