Нет способа напрямую использовать класс C ++ в коде C #. Вы можете использовать PInvoke косвенным образом для доступа к вашему типу.
Основной шаблон заключается в том, что для каждой функции-члена в классе Foo создайте связанную функцию, не являющуюся членом, которая вызывает функцию-член.
class Foo {
public:
int Bar();
};
extern "C" Foo* Foo_Create() { return new Foo(); }
extern "C" int Foo_Bar(Foo* pFoo) { return pFoo->Bar(); }
extern "C" void Foo_Delete(Foo* pFoo) { delete pFoo; }
Теперь нужно вызвать эти методы в код C #
[DllImport("Foo.dll")]
public static extern IntPtr Foo_Create();
[DllImport("Foo.dll")]
public static extern int Foo_Bar(IntPtr value);
[DllImport("Foo.dll")]
public static extern void Foo_Delete(IntPtr value);
Недостатком является то, что вам придется обходить неудобным IntPtr, но довольно просто создать класс-оболочку C # вокруг этого указателя для создания более удобной модели.
Даже если у вас нет этого кода, вы можете создать другую DLL, которая обернет исходную DLL и предоставит небольшой слой PInvoke.