【问题标题】:COM interop, C#, Visual Studio 2010 -> embed interop typesCOM 互操作、C#、Visual Studio 2010 -> 嵌入互操作类型
【发布时间】:2012-02-27 19:33:48
【问题描述】:

我的 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”,但随后出现此错误:

错误 Interoptypen aus 程序集“C:\...”不知道是否存在 ImportedFromTypeLibAttribute-Attribut 或 das PrimaryInteropAssemblyAttribute-Attribut fehlt。 c:...\sapnco.dll

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

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

【问题讨论】:

    标签: c# delphi com interop


    【解决方案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(...) { ... }
    

    【讨论】:

      猜你喜欢
      • 2023-03-04
      • 2017-10-12
      • 2011-02-14
      • 2011-01-27
      • 2018-05-10
      • 1970-01-01
      • 1970-01-01
      • 2010-12-14
      • 2011-01-29
      相关资源
      最近更新 更多