DotNet - Что такое интервал*?

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

Что это означает?

12
задан Arseni Mourzenko 14 July 2010 в 07:31
поделиться

3 ответа

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

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

'Unsafe' code C#

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

15
ответ дан 2 December 2019 в 06:44
поделиться

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

6
ответ дан 2 December 2019 в 06:44
поделиться

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

 int retval = 0;
 Method(ref retval);
 // Do something with retval
 //...
2
ответ дан 2 December 2019 в 06:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: