C# pointer hell или как не попасть впросакЕсли нам надо в структуре использовать массив заданной величины (как вы знаете проинициализировать свойства структуры до ее создания мы не можем), поэтому решение опять же в использование fixed. А руки иногда почесываются поставить? Нет, значит вы на правильном пути, нечего шаловливым ручонкам к памяти давать доступ. Вот и я думал, что не придется, а все же… Бывают ситуации, хотя и очень редко, когда надо использовать библиотеку (*. dll) написанную скажем на Delphi. И если для использования этой библиотеки нету промежуточного COM объекта или иных достижений цивилизации, да если еще «коллеги» написали в качестве параметров указатели (передаю им привет Wink), то тогда эта заметка будет вам в помощь. Конечно, надеюсь, что вы с таким не столкнетесь, но всякое бывает.
Итак, как использовать экспортируемые библиотеки из *. dll я сильно расписывать не буду, скажу, что в моем случае я использовал DllImport, вот пример:
} }
Обязательным параметром является extern, что указывает компилятору но то, что функция экспортируется из библиотеки, которая в данном случае будет искатся в каталоге с приложением, так как не указан полный путь.
Все хорошо, но если мы имеет что-то вроде этого:
Паниковать не надо, все решаемо. Для начала стоит разрешить в проекту использование unsafe («небезопасного», вот какого мнения об указателях Microsoft =|) кода. Данная опция позволяет использовать в проектк директиву unsafe, без нее компилятор будет очень громко ругатся на какие том там непонятные звездочки и амперсанты. Если следующие варианты использования: Объявить класс как unsafe:
Только метод:
Или же участок кода:
Опять же не все так просто, как казалось. Мы можем в таком участке кода объявлять указатели и брать адресса через оператор «&». Но если нам надо использовать указатель на byte[] или же char[]. На конструкцию следующего типа:
компилятор вам деликатно скажет, что он не может взять адреса, использовать sizeof(), и объявлять укаазтели на managed types, к коим относится, в частности, char[]. Решение этой проблемы в использовании директивы fixed. Проще говоря, данная директива исключает то, что ваша переменная будет выброшена в мусор GC (garbage collector). Пример использования:
Также директива fixed в C# 2. 0 и выше может использоваться еще в одном контексте. Например если нам надо в структуре использовать массив заданной величины (как вы знаете проинициализировать свойства структуры до ее создания мы не можем), поэтому решение опять же в использование fixed:
Вот и все, чем я хотел с вами поделится. Данная заметка не предентует на оригинальность, но надеюсь кому-то будет полезно. Вернутся Вам будет интересно:
|
- Публикации
Итак, у вас имеется свой собственный форум, но его никто не посещает? Мы готовы помочь вам справиться с этой нелегкой проблемой.
Данная статья в основном рассчитана на тех, кто самостоятельно занимается продвижением своего проекта.
Проклял все настройки кодировок, проклял DirectAdmin и еле-еле нашел то место где располагается и задается общий пароль для ...
Твиттер уже давно стал из нового web 2. 0 сервиса рекламной площадкой с огромным количеством потенциальных пользователей ...
Самое время кратко описать, чем нам придется заниматься. Прежде всего нужно понять, что блог ты будешь делать для получения ...
Долго не знал с чего начать данную статью. Статья что-то типа мыслей вслух и философии.