![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| VovanNumberOne |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 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 и ручной переборки байтов очень очень нужно! |
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 22 Всего: 118 |
используйте C++/CLR . написал пример для вашего случая (в аттаче) ( ну только сделаете библиотеку с классом и методами ConvertTo и ConvertFrom например и будет вам счастие)
Присоединённый файл ( Кол-во скачиваний: 4 )
MarshalAny.rar 5,93 Kb-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| VovanNumberOne |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 26.4.2010 Репутация: нет Всего: нет |
Спасибо большое!
Пригодится и это. Но мне пришлось реализовать свой CustomMarshaling для всех структуры целиком, побайтно распределяя данные. Так как структура очень не подъемная была, очень большая вложенность и размер ~60 Кб. Я бы ваше решение на С++ очень долго бы дорабатывал для такого.... Всё равно спасибо! |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [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. |