Подтвердить что ты не робот

DotNet - Что такое int *?

простой вопрос, я импортирую DLL-функцию, а параметр - int *. Когда я пытаюсь ввести метод (0), я получаю сообщение об ошибке: "int и int * не могут преобразовать".

В чем смысл?

4b9b3361

Ответ 1

Это классическое обозначение C для pointer to an int. Всякий раз, когда за типом следует *, он обозначает этот тип как указатель для этого типа. В С#, в отличие от C, вы должны явно определять функции как unsafe для использования указателей, в дополнение к включению небезопасного кода в свойствах проекта, Тип указателя также не может быть взаимозаменяемым с конкретным типом, поэтому сначала нужно указать ссылку типа. Чтобы получить указатель на другой тип, например int, на С# (или C и С++, если на то пошло), вы должны использовать оператор разметки & (амперсанд) перед переменной, к которой вы хотите получить указатель:

unsafe
{
    int i = 5;
    int* p = &i;
    // Invoke with pointer to i
    Method(p);
}

Небезопасный код С#

Ниже приведены некоторые ключевые статьи о небезопасном коде и использование указателей на С#.

Ответ 2

Это a указатель на int. Как правило, лучше всего избегать управляемого кода. Возможно, вы захотите опубликовать объявление импортированного метода. IntPtr обычно достаточно для такого взаимодействия.

Ответ 3

Это зависит от языка, который вы используете. В С# вы должны объявить аргумент с ключевым словом "ref". В VB.NET вы должны использовать ключевое слово ByRef. И вам нужно вызвать его, передав переменную, а не константу. Что-то вроде этого:

 int retval = 0;
 Method(ref retval);
 // Do something with retval
 //...