Как преобразовать ссылки C ++ и указатель возвращается в C ++ / CLR - PullRequest
2 голосов
/ 09 апреля 2019

Мне нужно преобразовать большую часть кода C ++ в C ++ / CLR для использования внешним интерфейсом, написанным на C #.

Каковы будут подходящие объявления этих двух методов C ++ в C ++ / CLR?

MyClass& MyMethod1();

MyClass* MyMethod2();

Первоначальный код был написан на Embarcadero XE2, теперь среда представляет собой visualC ++ Поскольку существует так много кода для преобразования, что я действительно хотел бы сохранить как можно больше.Также коммерческий компонент (Embarcadero), который использовался в исходном коде, теперь является компонентом CLR, поэтому мне в значительной степени придется преобразовать старый код в C ++ / CLR.

Ответы [ 2 ]

0 голосов
/ 09 апреля 2019

Обе функции должны возвращать дескрипторы к ссылочному типу, т.е.

ref class SomeClass
{
public:
    MyClass ^MyMethod1()
    {
        return gcnew MyClass();
    }

    MyClass ^MyMethod2()
    {
        return gcnew MyClass();
    }
};

Это будет эквивалентно указателю на объект класса.

0 голосов
/ 09 апреля 2019

У меня есть некоторый опыт использования C ++ CLI с написанным на C # .Net приложением. Мой совет - не конвертировать всю библиотеку C ++, а писать интерфейсные оболочки, например:

// existing unmanaged code
class UnmanagedClass
{
public:
    void SomeMethod();
};

// a C++ CLR
ref class ManagedWrapper
{
public:
    void SomeMethod()
    {
        obj->SomeMethod();
    }

private:
    UnmanagedClass* object;
};

Да, впереди еще много работы (вам нужно создать оболочки для всех интерфейсных объектов, параметров, перечислений и т. Д. Но это все же меньше, чем для переноса всего кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...