C ++ / CLI, управляемый VS. неуправляемый короткий - PullRequest
1 голос
/ 29 февраля 2012

У меня есть неуправляемая библиотека, которую я хочу использовать из управляемого класса. Интерфейс функции:

GetProgress(short* value);

Итак, я написал в своем управляемом классе:

short val = 0;
GetProgress(&val);

Я получил следующую ошибку:

Ошибка C2664: «GetProgress»: невозможно преобразовать параметр 1 из «cli :: interior_ptr» в «short *» с [Type = short]

Я прочитал эту тему , поэтому я изменил свой код на:

short val = 0;
pin_ptr<short*> pVal = &val;
GetProgress(pVal);

И в дополнение к предыдущей ошибке я получаю

Ошибка C2440: «инициализация»: невозможно преобразовать из «short *» в «cli :: pin_ptr» с [Type = short *]

Как я могу это исправить?

1 Ответ

1 голос
/ 29 февраля 2012

Это интересно.

Следующий код создает C2664, потому что val может только быть управляемым типом:

using namespace System;

void GetProgress(short* value)
{
    // unmanaged goodness
}

ref class XYZ : System::Object
{
    short val;

    void foo()
    {
        GetProgress(&val);
    }
};

но если сначала объявить локальную переменную, все будет работать нормально ...

using namespace System;

void GetProgress(short* value)
{
    // unmanaged goodness
}

ref class XYZ : System::Object
{
    short val;

    void foo()
    {
        short x;
        GetProgress(&x);
        val = x;
    }
};

Не совсем тот ответ, который вы искали, но я решил включить его, поскольку это простое исправление.

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