OutAttribute и out keyword

219
23 января 2018, 09:19

В чём заключается разница между ключевым словом out и атрибутом Out? На сколько мне известно из документации, эти вещи эквивалентны.

Но как же тогда объясняется следующая проблема: при импорте WinAPI функции некоторый из её параметров оказывается ссылочным; при указании атрибута Out вызов функции приводит к ошибке 87 (неверный параметр), но если использовать ключевое слово out, такой проблемы не возникает?

Answer 1

Ключевое слово out при компиляции преобразуется в комбинацию атрибута [Out] и ссылочного типа (того самого, который обозначается ключевым словом ref).

Очевидно, вы забыли про ref - отсюда и ошибка.

Answer 2

Нашел вот это(Далее вольный перевод):

[In] и [Out] используются, что бы разрешить двусмысленность при работе с указателями. [In] всегда ставится неявно по умолчанию=> явно его можно не указывать.

Однако, если ты хочешь получить какие-то изменения на вызывающей стороне, то должен указать атрибут [Out] явно.

Иногда, что бы увидеть изменения в переменной не нужно указывать [Out], например если тип является bittable.

Большинство типов данных имеют общее представления и для managed, и для unmanaged памяти, и не требуют специальной обработки. Эти типы называют blittable, потому что они не требуют специальной обработки при передачи между managed и unmanaged кодом. Другие типы, которые требуют специальных преобразований, называются non-blittable. Вы можете думать, что большинство простых типов являются blittable, и все составные типы являются non-blittable.

READ ALSO
Как создавать и изменять dbf в C#

Как создавать и изменять dbf в C#

Здравствуйте, нужно открыть dbf файл, изменить его через SQL запросы и сохранить в другой файлС dbf никогда не работал, поэтому искал код в инете

579
Как создать инсталлятор для настройки VSTO?

Как создать инсталлятор для настройки VSTO?

У меня стоит Visual Studio Enterprise 2017Необходимо создать инсталлятор для созданной настройки VSTO для PowerPoint 2013

302
Чтение базы Sqlite при открытом браузере

Чтение базы Sqlite при открытом браузере

Подскажите, можно ли достать данные ( прочитать базу ) при открытом браузере? Есть ли какие-нибудь средства обхода?

265
Как вызвать из события поток с параметрами, заданными через класс C#?

Как вызвать из события поток с параметрами, заданными через класс C#?

Доброе время сутокИмеются срабатывающие в таймере событие, 3 потока и класс, передающий в поток 2 параметра (объект из очереди и время "эмуляции"...

338