COM相互運用機能、C#、Visual Studio 2010 - >組み込み型

私のC#プログラムはNco3(sapnco.dll)経由でSAPにアクセスします。このプログラムはまた、Delphiと連携する必要があります。私のメソッドのいくつかは、sapnco.dllから型を返します:

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

Delphiではこのメソッドは次のように表示されます。

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

私のTLBにはsapnco.dllが含まれていないので、この IUnknown があります。 Visual Studioで「Embed Interop Types = true」を試しましたが、このエラーが発生します。

エラーInteroptypen ausアセンブリ "C:\ ..."は、ImportedFromTypeLibAttribute-AttributまたはPrimaryInteropAssemblyAttribute-Attribut fehltを使用して呼び出されました。 c:... \ sapnco.dll

     

(一部の属性がないため、Interopタイプを埋め込むことができませんでした)

これは正しい方法ですか?もしそうなら、これらの属性をどこに置くのですか?

4

1 答え

sapnco.dllは.NET DLLであるため、COMには公開されないため、COM環境でこの型を直接使用することはできません。あなたの問題の解決策は、COM公開クラスでsapnco.dllをラップするためのライブラリを作成することです。

例として:

[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(...) { ... }
1
追加された