Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
49 / 49 / 2
Регистрация: 17.07.2011
Сообщений: 318

Маршалинг данных

21.01.2014, 19:54. Показов 1494. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Необходимо передавать массивы данных из управляемого кода в неуправляемый. Почитал про атрибуты [in] [out], но я понял так, что независимо от операции производится копирование данных всегда, видимо в целях безопасности , если я не прав, поправьте.
Вариант второй, не применять атрибуты вообще, а отправлять ссылку на зафиксированные данные через GCHandle или оператором fixed в неуправляемый код, в таком случае избегу ли я копирования данных? А так же интересно если чтение происходит из управляемой памяти, может ли неуправляемый код вносить изменения в эту память? Пишу всё это для работы с opengl, там все методы подразумевающие получение данный в графическую библиотеку снабжены модификатором const.
В принципе копирование данных происходит из оперативной памяти в графическую, так что очень не хотелось бы дублировать операцию.
Спасибо.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.01.2014, 19:54
Ответы с готовыми решениями:

Маршалинг структуры C# --> C
В неуправляемом коде (bla.dll) есть структура: typedef struct { ULONG32 a; UINT8 b; UINT8 c; UINT16 d; ...

Маршалинг и структура
Добрый день, товарищи. Есть библиотека С++, в которой имеется структура и метод с нею работающий: struct MyCPPStruct { char...

Маршалинг C++ wchar_t** в C#
Доброго времени суток! Столкнулся со следующей задачей. Есть библиотека, в библиотеке есть функция, которую необходимо вызвать в C#...

3
60 / 48 / 13
Регистрация: 12.11.2012
Сообщений: 373
Записей в блоге: 2
28.01.2014, 22:42
Если только для OpenGL, то пишите на С++ и будет Вам счастье. Вот здесь можно найти подробные уроки на эту тему, в которых, за одно, и о некоторых особенностях C++ и WinApi рассказывается. А если всё таки нужно потом всем этим на C# управлять, можно просто создать проект C++/CLR, который может состоять из управляемых классов, методов и данных, но при этом свободно (без всякого копирования) обращаться с неуправляемыми. Кстати, библиотека dll написанная на C++/CLR сишарпом проглатывается как родная.
1
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8729 / 3681 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
28.01.2014, 22:53
Лучший ответ Сообщение было отмечено danrusm как решение

Решение

Цитата Сообщение от danrusm Посмотреть сообщение
производится копирование данных всегда
Не всегда, но некоторая работа над данными необходима, в частности для массива нужно получить адрес самих данных (адрес массива + число).
Цитата Сообщение от danrusm Посмотреть сообщение
в таком случае избегу ли я копирования данных?
Считайте, что Вы самостоятельно выполните маршалинг над массивом.
Цитата Сообщение от danrusm Посмотреть сообщение
если чтение происходит из управляемой памяти, может ли неуправляемый код вносить изменения в эту память
Разница между управляемой и неуправляемой только в том, что за содержимым управляемой следит GC, а так это одна область памяти.

Добавлено через 3 минуты
Соглашусь с НеСказочник, что прослойка для нативных библиотек в виде C++/CLI в большинстве случаев получается в разы проще (с учетом знания C++/CLI) и красивее чем на C#.
1
49 / 49 / 2
Регистрация: 17.07.2011
Сообщений: 318
29.01.2014, 20:48  [ТС]
У меня уже есть практика использования обоих подходов, просто на данный момент делаю парсер-конвертер
glext в класс c#, будет очень удобно, а так же не нужно ждать обновлений Tao и тому подобных.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.01.2014, 20:48
Помогаю со студенческими работами здесь

Маршалинг string
Возник затуп при обращении к dll на с++. Как связан .net'овский string и CHAR,WCHAR,LPSTR,LPCSTR,LPWSTR,LPCWSTR? Как будет маршалинг...

Что такое маршалинг?
Можете по простому объяснить что это такое. И пример, где это используется и для чего он нужен.

Маршалинг Waveform Audio
Привет. Возникла необходимость сделать wrapper для c# библиотеки Windows Waveform Audio. Пока работаю пока только с одной структурой...

Маршалинг структур. Размер string
В общем начал разбираться с маршалингом структур. правда некоторые моменты непонятны. например Вот я делаю так public...

Маршалинг структур: динамическое управление размером
Решил изучить как с помощью средств c# передавать структуры. Нашел способы преобразования структур в массив байт с помощью Marashal. Вот...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru