![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| zss |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 708 Регистрация: 17.6.2004 Репутация: нет Всего: 2 |
почему для класса
метод
вываливает с исключением
Это сообщение отредактировал(а) zss - 20.1.2007, 21:02 |
||||||
|
|||||||
| marcusmae |
|
|||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 22 Всего: 39 |
zss, по-моему, так не выйдет
А что, если сделать оба класса структурами? -------------------- ἀπὸ μηχανῆς θεός |
|||
|
||||
| zss |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 708 Регистрация: 17.6.2004 Репутация: нет Всего: 2 |
||||
|
||||
| zss |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 708 Регистрация: 17.6.2004 Репутация: нет Всего: 2 |
нашел в чем проблемма. Это все из-за класса А. т.к. он создан через new. Когда я его закоментировал - то все нормально.
Странно - ведь он тоже [StructLayout(LayoutKind.Sequential)]. Почему так ? |
|||
|
||||
| marcusmae |
|
||||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 22 Всего: 39 |
наверно, проблемы содержатся в плоскости различий между классами и структурами
в смысле, нельзя указать значение поля по умолчанию? = Да, но ведь можно их указать в конструкторе структуры. Используя класс, вызов конструктора понадобится в любом случае, так что, непонятно, в чём выигрыш. -------------------- ἀπὸ μηχανῆς θεός |
||||
|
|||||
| zss |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 708 Регистрация: 17.6.2004 Репутация: нет Всего: 2 |
не понятно почему. и класс и структура унаследованны от object. так в чем проблемма ? Я не думаю что разработчики маршалинга ограничились только классами. Надеюсь все-таки решение есть |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
zss, а что всё-таки интересует ? Как передать структуру "as is", или сериализовать класс ?
-------------------- ![]() |
|||
|
||||
| zss |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 708 Регистрация: 17.6.2004 Репутация: нет Всего: 2 |
mr.DUDA, как сериализовать класс
|
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Тогда Marshal.SizeOf не нужен. Сериализуем объект в стрим, размер стрима и будет искомым sizeof
-------------------- ![]() |
|||
|
||||
| zss |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 708 Регистрация: 17.6.2004 Репутация: нет Всего: 2 |
||||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Пожалуйста, пример:
Добавлено @ 12:58 Единственное, чем нехороша сериализация - много лишней инфы уходит в поток (имена типов и assembly пишутся 1 раз, но занимают прилично места - до 60..100 байт на тип). -------------------- ![]() |
|||
|
||||
| zss |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 708 Регистрация: 17.6.2004 Репутация: нет Всего: 2 |
тоесть в поток и метаданные пишуться ? Блин - это плохо. Мне нужно чистые данные. Просто у меня кон на С++ и ничего не знает об этих метаданных. Можно конечно там сериализовать boost-ом но нет гарантии совместимости - разные разработчики. Остается только маршалить Добавлено @ 13:09 З.Ы. Это типичная несовместимость... Надо переходить на Qt |
|||
|
||||
| zss |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 708 Регистрация: 17.6.2004 Репутация: нет Всего: 2 |
для структуры [StructLayout(LayoutKind.Sequential)] почему-то не получается создать конструктор по-умолчанию Это сообщение отредактировал(а) zss - 22.1.2007, 14:33 |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Вместо классов можно использовать структуры, тогда можно копировать Marshal-ом в байтовый массив. Структуры почти ничем не отличаются от классов в C#, ну разве что наследование не поддерживают, требуют конструктор с параметрами и не позволяют инициализировать поля при объявлении.
З.Ы. надо переходить от C++ в полностью managed -------------------- ![]() |
|||
|
||||
| zss |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 708 Регистрация: 17.6.2004 Репутация: нет Всего: 2 |
у меня структура из 30 полей. Так что их все нужно в конструкторе передавать ? Именно из-за этого я и не хотел использовать структуры. слабоват он пока. Да и низкоуровневые фишку часто нужны бывают |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |