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

4

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

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

在Delphi中,该方法显示为:
function table(...): IUnknown { ... }

我猜测这个 IUnknown 是因为我的TLB中没有包含sapnco.dll。我在Visual Studio中尝试了"Embed Interop Types = true",但是出现了以下错误:

由于缺少ImportedFromTypeLibAttribute属性或PrimaryInteropAssemblyAttribute属性,无法嵌入程序集“C:\...”中的互操作类型。

(Interop Types could not be embedded because some attributes are missing).

如果这是正确的方法,那么应该把这些属性放在哪里呢?

1个回答

1
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(...) { ... }

1
你的类应该实现接口。"public class ComRfcTable : IComRfcTable" - Santosh Vishwakarma
1
你的类应该实现接口。"public class ComRfcTable : IComRfcTable" - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接