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

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

12 голосов
/ 13 июля 2010

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

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

Ответы [ 3 ]

15 голосов
/ 13 июля 2010

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

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

«Небезопасный» код C #

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

6 голосов
/ 13 июля 2010

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

2 голосов
/ 13 июля 2010

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

 int retval = 0;
 Method(ref retval);
 // Do something with retval
 //...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...