Создание управляемого интерфейса C++ для использования в C#

У нас есть набор бизнес-правил Native C++, завернутый в C++/CLI, а затем в слой C#, поэтому мы можем предоставить его через DCOM.

Собственные бизнес-правила C++ находятся в библиотеке DLL и легко вызываются в C++/CLI, которая находится в видимой библиотеке COM. Затем мы добавляем эту DLL в качестве ссылки на проект C#.

Уровень C# имеет множество классов, производных от ServicedComponent, и мы применяем regsvcs, чтобы зарегистрировать его в качестве сервера DCOM.

Однако возникла потребность в том, чтобы уровень C++/CLI взаимодействовал с уровнем C#. Для этого я думал об использовании интерфейса в стиле С#. Уровень C# будет производным от интерфейса и передаст его на уровень C++/CLI, который затем может вызывать методы на нем, чтобы заставить что-то происходить на уровне C#. Этот интерфейс необходимо будет объявить на уровне C++/CLI для видимости. Это моя проблема, я, кажется, не могу этого добиться.

Есть ли способ объявить интерфейс стиля С# в С++/CLI, а затем использовать его в С#?


person David Gray Wright    schedule 21.05.2015    source источник
comment
Управляемый C++ относится к Visual C++ с управляемыми расширениями, как в Visual Studio .NET 2003. Вы, вероятно, имеете в виду его преемника C++/CLI. Если это так, пожалуйста, перефразируйте и измените теги.   -  person Tom Blodget    schedule 22.05.2015
comment
Изменено, как было предложено.   -  person David Gray Wright    schedule 22.05.2015


Ответы (1)


Существует (https://msdn.microsoft.com/en-us/library/737cydt1.aspx):

#pragma managed
using namespace System;

public interface class MyInterface
{
    void MyFunction();
}

И используется в С#:

public class MyClass : MyInterface
{
    public void MyFunction() { }
}
person jaket    schedule 21.05.2015
comment
Если я объявлю это так, я получу. ошибка CS0246: не удалось найти тип или имя пространства имен «MyInterface» (вам не хватает директивы using или ссылки на сборку?) - person David Gray Wright; 22.05.2015
comment
Кстати, есть сборка и оператор использования. Если я удалю метод MyFunction из класса, производного от MyInterface, я получаю ошибки Intellisense, что интерфейсный член xxx не реализован - person David Gray Wright; 22.05.2015
comment
Я редактирую ответ, чтобы показать, что именно я скомпилировал без ошибок. Я использую VS2013. - person jaket; 22.05.2015
comment
Хорошо, но как интерфейс C++/CLI используется в сборке C# без ошибок. Я получаю ошибки по какой-то причине. - person David Gray Wright; 22.05.2015
comment
Вам нужен класс для реализации интерфейса. - person jaket; 22.05.2015
comment
Вот где я получаю ошибку, о которой я упоминал выше - ваш пример кода показывает только объявление интерфейса. У вас есть сценарий, о котором я упоминаю, работает? - person David Gray Wright; 22.05.2015
comment
Давайте продолжим обсуждение в чате. - person David Gray Wright; 22.05.2015
comment
Похоже, что мое решение ссылалось на старую сборку с жесткого диска, а не на соответствующий проект. Я исправил это и снова открыл решение, и теперь оно работает. - person David Gray Wright; 22.05.2015