Как передать управляемую ссылку на неуправляемый код в C ++ / CLI? - PullRequest
3 голосов
/ 21 мая 2011

Я использую C ++ / CLI только для модульного тестирования неуправляемого кода C ++ в VS2010.Я переключил компилятор на / clr и использовал неуправляемый код из статической библиотеки.

У меня есть простое свойство int в моем тестовом классе.Я хотел бы передать это как const int & функции в нативном C ++.Но он не может скомпилироваться, и я обнаружил, что это потому, что вы не можете смешивать ссылки таким образом.

Как это сделать, я пытался следовать, и это работает, но есть лилучше?

[TestClass]
public ref class MyTestClass
{
private:
    int _my_property;
public:

    [TestMethod]
    void MyTestMethod()
    {
        MyNativeClass c;
        // c.SomeMethod(_my_property) this doesn't work

        int i = _my__property;
        c.SomeMethod(i) // this works
    }
}

1 Ответ

4 голосов
/ 21 мая 2011

C ++ ссылки на самом деле просто синтаксический сахар для указателей. Указатель C ++ указывает на конкретную точку в памяти, в то время как ссылки CLI могут свободно перемещаться сборщиком мусора. Чтобы передать ссылку на объект в управляемой памяти на неуправляемый код, вам нужно закрепить указатель.

Дополнительная информация и пример в другом вопросе SO: Преобразование из указателя C ++ / CLI в собственный указатель C ++

Редактировать 2

Я удаляю дополнительную информацию, поскольку она явно неверна (спасибо @Tergiver и @DeadMG за ваши комментарии). Я также создаю вики пост-сообщества, поэтому не стесняйтесь добавлять любую дополнительную правильную информацию.

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