![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| Lotus |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 16.1.2007 Репутация: нет Всего: нет |
Привет Всем! У меня вопрос . У меня имееться сруктура на С++ к примеру:
// Card-Acceptor-Name-Loc, field #43 typedef union { char chData[30]; struct CrdAccptNameLoc_t { char chOwner[22]; char chCity[13]; char chState[3]; char chCountry[2]; char chFiller[8]; } stCrdAccptNameLoc; struct AFJPMember_t { char chPrefix[3]; char chMemberNumber[12]; char chFiller[25]; } stAFJPMemberData; } CRDACCPTNAMELOC_ISO, FIELD43; как мне периписать его на С#. Заранее спасибо!!!!!!1 Это сообщение отредактировал(а) Lotus - 17.1.2007, 08:39 |
|||
|
||||
| vladsch |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 6.12.2006 Репутация: 1 Всего: 4 |
Ну, примерно так. Только сразу несколько оговорок. Так char в шарпе двухбайтовый, я использовал byte. И компиляция требует разрешенного unsafe кода. Собственно, пример:
|
|||
|
||||
| Lotus |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 16.1.2007 Репутация: нет Всего: нет |
vladsch,
Спасибо за помощь!!!! Сейчас я его опробую.... |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
union можно имитировать одинаковым FieldOffset, но байтовый массив chData нельзя перекрыть со структурой. Ближе всего к этому коду такой вариант:
Конструкторы с bool-аргументом здесь присутствуют по следующей причине: поля char[] нужно проинициализировать (иначе там будут null-ы), а сделать это для структуры можно только в конструкторе с параметрами. FIELD43 объявлен как алиас типа CRDACCPTNAMELOC_ISO. -------------------- ![]() |
|||
|
||||
| Lotus |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 16.1.2007 Репутация: нет Всего: нет |
Пробую компильнуть выбивает ошибка Unsafe code may only appear if compiling with /unsafe
в чем может быть проблема? Может что-то в настройках? Я на MVS 2005 только неделю как начал работать, поэтому всех тонкостей знаю, да и летературы маловато, пологаюсь только на свою интуицию... |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Про fixed не знал, плюс в репу vladsch.
Добавлено @ 11:37 В настройках проекта нужно поставить птицу "Allow unsafe code". -------------------- ![]() |
|||
|
||||
| vladsch |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 6.12.2006 Репутация: 1 Всего: 4 |
to mr.DUDA:
Почему нельзя перекрыть массив? Этот код работает и видно что данные перекрывается Пробывал твой код проверить, во время выполнения он вылетает Вот тест: CRDACCPTNAMELOC_ISO obj = new CRDACCPTNAMELOC_ISO(true); for (int i = 0; i < 22; i++) { obj.stCrdAccptNameLoc.chOwner[i] = (char) i; } for (int i = 0; i < 3; i++) { Console.WriteLine(obj.stAFJPMemberData.chPrefix[i]); } |
|||
|
||||
| Lotus |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 16.1.2007 Репутация: нет Всего: нет |
||||
|
||||
| Lotus |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 16.1.2007 Репутация: нет Всего: нет |
vladsch, и
mr.DUDA, спасибо за помощь, проблема решена!!!!!!!!!!!!!!!! |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
У меня при попытке перекрыть структуру и массив вылетает исключение при старте - пишет что-то типа cannot overlap structure and non-object data. Похоже, структуры тоже нельзя перекрывать друг с другом - при инициализации второй структуры, ссылка на массив chPrefix (длина 3) заменяет собой содержимое поля chOwner, поэтому вместо 22 элементов там всего 3. -------------------- ![]() |
|||
|
||||
| Lotus |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 16.1.2007 Репутация: нет Всего: нет |
mr.DUDA,
Может в данной ситуации их лучше вообще не использовать а применять только классы? Это сообщение отредактировал(а) Lotus - 18.1.2007, 13:44 |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Классы маршалятся по ссылке, поэтому их нельзя передавать в длл на C++, структуры практически всегда используют для передачи в/из обычных длл.
-------------------- ![]() |
|||
|
||||
| Lotus |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 16.1.2007 Репутация: нет Всего: нет |
mr.DUDA в таком случаи какой из двух примеров мне выбрать Ваш или vladsch, для моей библиотечке?
Это сообщение отредактировал(а) Lotus - 18.1.2007, 15:18 |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Рабочий пример лучше -------------------- ![]() |
|||
|
||||
| vladsch |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 6.12.2006 Репутация: 1 Всего: 4 |
Lotus, а тебе зачем вся эта кухня нужна?
Тебе требуется передавать эту структуру в неуправляемый код (например, в длл, написанную на плюсах)? Или просто надо было организовать похожее на шарпе? |
|||
|
||||
| Lotus |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 16.1.2007 Репутация: нет Всего: нет |
vladsch,
Дело в том что мне нужно разработать библиотеску под стандарт ISO 8583? есть пример на С++, но я хотел бы переписать его на шарп. Моя первая программа на шарпе была прога которая генерировала ключи медотом 3DES, после чего я и захотел перейти на этот язык, т.к в нем гораздо удобнее работать да и встроинных возможностей побольше... Только соответствующей литературы маловато.
Вы правы мне нужно организовать похожее на шарпе, буду очень признателен любой вашей помощи и любому вашему совету!!! Это сообщение отредактировал(а) Lotus - 19.1.2007, 08:47 |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [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. |