простой вопрос, я импортирую DLL-функцию, а параметр - int *. Когда я пытаюсь ввести метод (0), я получаю сообщение об ошибке: "int и int * не могут преобразовать".
В чем смысл?
простой вопрос, я импортирую DLL-функцию, а параметр - int *. Когда я пытаюсь ввести метод (0), я получаю сообщение об ошибке: "int и int * не могут преобразовать".
В чем смысл?
Это классическое обозначение C для pointer to an int
. Всякий раз, когда за типом следует *
, он обозначает этот тип как указатель для этого типа. В С#, в отличие от C, вы должны явно определять функции как unsafe
для использования указателей, в дополнение к включению небезопасного кода в свойствах проекта, Тип указателя также не может быть взаимозаменяемым с конкретным типом, поэтому сначала нужно указать ссылку типа. Чтобы получить указатель на другой тип, например int, на С# (или C и С++, если на то пошло), вы должны использовать оператор разметки &
(амперсанд) перед переменной, к которой вы хотите получить указатель:
unsafe
{
int i = 5;
int* p = &i;
// Invoke with pointer to i
Method(p);
}
Небезопасный код С#
Ниже приведены некоторые ключевые статьи о небезопасном коде и использование указателей на С#.
Это a указатель на int. Как правило, лучше всего избегать управляемого кода. Возможно, вы захотите опубликовать объявление импортированного метода. IntPtr обычно достаточно для такого взаимодействия.
Это зависит от языка, который вы используете. В С# вы должны объявить аргумент с ключевым словом "ref". В VB.NET вы должны использовать ключевое слово ByRef. И вам нужно вызвать его, передав переменную, а не константу. Что-то вроде этого:
int retval = 0;
Method(ref retval);
// Do something with retval
//...