Компиляция существующего кода C ++ с помощью / clr и последующий вызов его из C #

У меня есть некоторый код C ++:

namespace Compute {
  class __declspec(dllexport) IProgressCB {
  public:
    virtual void progress(int percentCompleted) = 0;
  };

  double __declspec(dllexport) compute(IProgressCB *progressCB, ...);
}

, из которого я создаю compute.dll с включенной в Visual Studio 2008 «поддержкой Common Language Runtime Support (/ clr)».

Я хочу вызвать этот код из C #.

Затем я создаю консольное приложение C # и добавляю compute.dll в качестве ссылки. Затем я пытаюсь создать подкласс / реализовать IProgressCB:

public class Progress : Compute.IProgressCB
{
    public void progress(int percentCompleted)
    {
        Console.WriteLine(percentCompleted + "% completed.");
    }
}

Однако автозаполнение VS находит пространство имен "Compute", но не какие-либо классы или функции внутри него !? Когда я пытаюсь скомпилировать; он жалуется на то, что IProgressCB не является публичным. Если я пишу публично до объявления IProgressCB, он жалуется на невозможность наследовать от запечатанного типа Compute.IProgressCB.

Что я здесь делаю не так? Я хочу взять существующий код C ++, не вносить в него изменений, но скомпилировать его с помощью / clrc, а затем использовать его с C #. Разве это невозможно?

7
задан Deduplicator 11 March 2015 в 00:56
поделиться