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

hivapdat  于 2023-06-22  发布在  C#
关注(0)|答案(1)|浏览(146)

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

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

在 Delphi 中,此方法显示为

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

我想这个IUnknown是因为我的TLB不包括sapnco.dll。我在Visual Studio中尝试了“Embed Interop Types = true”,但出现了以下错误:
错误Interopypen aus Assembly“C:...”不能使用Iningebettet韦尔登,weil das ImportedFromTypeLibAttribute-Attribut or das PrimaryInteropAssemblyAttribute-Attribut fehlt。c:...\sapnco.dll
(由于缺少某些属性,无法嵌入互操作类型)。
这条路对吗?如果是,这些属性应该放在哪里?

kuarbcqp

kuarbcqp1#

sapnco.dll是一个.NET dll,因此它不向COM公开,因此您不能在COM环境中直接使用此类型。您的问题的解决方案是创建一个库,将sapnco.dll Package 在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(...) { ... }

相关问题