Вы не упоминаете, какую версию .NET вы используете, но что-то, что мне помогло при использовании Visual Studio .NET 2003, - это предоставить тонкую оболочку C # для реализации с прыщами реального класса C ++:
public __gc class MyClass_Net {
public:
MyClass_Net()
:native_ptr_(new MyClass())
{
}
~MyClass_Net()
{
delete native_ptr_;
}
private:
MyClass __nogc *native_ptr_;
};
Очевидно, что здесь предпочтительнее использовать Boost shared_ptr, но я никогда не смогу заставить их хорошо играть с V.NET 2003 ...
Методы просто перенаправляют на базовые методы C ++ через указатель. Аргументы метода могут быть преобразованы. Например, чтобы вызвать метод C ++, который принимает строку, метод C #, вероятно, должен взять System.String (System :: String в Managed C ++). Для этого вам понадобится System :: Runtime :: InteropServices :: Marshal :: StringToHGlobalAnsi ().
Одна приятная вещь в этом подходе состоит в том, что Managed C ++ - это язык .NET, вы можете выставлять методы доступа как свойства (__property). Вы даже можете выставлять атрибуты, очень как в C #.