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

时间:2012-02-06 09:42:00

标签: c# delphi com interop

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

public void IRfcTable table(...) { ... }
在Delphi中,

这个方法显示为

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

我认为这个IUnknown是因为我的TLB不包含sapnco.dll。我在Visual Studio中尝试“嵌入Interop Types = true”,但之后会出现此错误:

  

错误Interoptypen aus Assembly“C:\ ...”könnennichteingebettet werden,weil das ImportedFromTypeLibAttribute-Attribut oder das PrimaryInteropAssemblyAttribute-Attribut fehlt。 C:... \ sapnco.dll

     

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

这是正确的方法吗?如果是这样,在哪里放置这些属性?

1 个答案:

答案 0 :(得分:1)

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

举个例子:

[ComVisible(true)]
public interface IComRfcTable
{
    public void DoSomething();
}

[ComVisible(true)]
public class ComRfcTable
{
    private _rfcTable; // object to wrap
    public ComRfcTable(IRfcTable rfcTable)
    {
        _rfcTable = rfcTable
    }

    public void DoSomething()
    {
        _rfcTable.DoSomething();
    }
}

然后你的方法必须实现如下:

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