Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Маршалинг структур, Проблемы с нестандартными строками 
:(
    Опции темы
VovanNumberOne
Дата 26.4.2010, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 26.4.2010

Репутация: нет
Всего: нет



Всем привет!

Имеется струкрута в которой помимо всего имеются:
1) Ansi строки которые передаются туда по значению.
Строки нуль-детерминированные и длина их динамическая, соответсвенно в атрибут [MarshalAs()] нельзя прописать ни UnmanagedType.ByValTStr ни UnmanagedType.AnsiBStr, так как байта-префикса с длинной нету :(
2) В той же структуре есть ещё и другие строки (тоже by value, без указателей), которые наоборот не нуль-детерминированы, но имеют префикс с длинной строки, только этот префик не однобайтный а 4-байтный (int) :wall:

Как провести марашализацию такой структуры?

Ничего не гуглится... Есть только аналогичные вопросы и без ответа: (Гляньте если мой краткий вопрос вам не понятен, мне надо такое http://www.codeguru.com/forum/showthread.php?t=454610 )

Я попробовал сделать свой Маршаллер от ICustomMarshaler, пишу для поля в структуре атрибут
[MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(MyMarshaler))]
и при запуске выяснёется страшное, что нельзя почему-то использовать свои маршаллеры для полей структур.

Что делать??? Писать свой маршаллер для всей здоровой структуры??? Кажется только это и остаётся.
Очень нужна помощь!

P.S.
Исходников dll у меня конечно нет, и я честно не знаю кто её писал и чем он руководствовался делая такие странные нестандартные параметры и структуры. :wall:
Но написать обёртку к ней без unsafe и ручной переборки байтов очень очень нужно! 
PM MAIL   Вверх
jonie
Дата 27.4.2010, 08:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 22
Всего: 118



используйте C++/CLR . написал пример для вашего случая (в аттаче) ( ну только сделаете библиотеку с классом и методами ConvertTo и ConvertFrom например и будет вам счастие)


Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  MarshalAny.rar 5,93 Kb


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
VovanNumberOne
Дата 27.4.2010, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 26.4.2010

Репутация: нет
Всего: нет



Спасибо большое!
Пригодится и это.
Но мне пришлось реализовать свой CustomMarshaling для всех структуры целиком, побайтно распределяя данные.
Так как структура очень не подъемная была, очень большая вложенность и размер ~60 Кб. Я бы ваше решение на С++ очень долго бы дорабатывал для такого.... Всё равно спасибо!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0428 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.