COM-взаимодействие, C #, Visual Studio 2010 -> вставлять типы взаимодействия - PullRequest
4 голосов
/ 06 февраля 2012

Моя программа на C # обращается к SAP через Nco3 (sapnco.dll). Эта программа также должна работать с Delphi. Некоторые из моих методов возвращают типы из sapnco.dll:

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

в Delphi этот метод отображается как

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

Я полагаю, это IUnknown, потому что мой TLB не включает sapnco.dll. Я попытался "Вставить Interop Types = true" в Visual Studio, но затем возникает эта ошибка:

Ошибка Interoptypen aus Assembly "C: \ ...". с: ... \ sapnco.dll

(Не удалось внедрить типы взаимодействия, поскольку некоторые атрибуты отсутствуют).

Это правильный путь? Если так, то где поставить эти атрибуты?

1 Ответ

1 голос
/ 27 февраля 2012

sapnco.dll - это DLL-библиотека .NET, поэтому она не подвергается воздействию 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(...) { ... }
...