простой вопрос, я импортирую функцию DLL, и параметр int*. Когда я пытаюсь ввести Метод (0), я получаю ошибку, которая говорит: "интервал и интервал* не могут преобразовать".
Что это означает?
Это классическая нотация языка Си для указателя на 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#.
Это указатель на int . Как правило, лучше избегать использования управляемого кода. Возможно, вы захотите опубликовать объявление импортированного метода. Для такого взаимодействия обычно достаточно IntPtr.
Это зависит от языка, который вы используете. В C# вы должны объявить аргумент с помощью ключевого слова "ref". В VB.NET вы должны использовать ключевое слово ByRef. И вызывать его нужно, передавая переменную, а не константу. Что-то вроде этого:
int retval = 0;
Method(ref retval);
// Do something with retval
//...