Декодер ASN1C DER

Я пытаюсь создать простой декодер DER - консольное приложение, которое просто выводит содержимое заданной структуры данных (закодированное в формате DER, например вот этот).

У меня возникли проблемы с запуском этого примера: Декодер "Прямоугольник".

Я пытаюсь скомпилировать его с помощью MSVC, и у меня проблемы с #include <inttypes.h> и #include <netinet/in.h>. Также тип ssize_t не определен.

Вот что я сделал на данный момент:
1. В онлайн-компиляторе ASN.1 я вставил этот код в текстовое поле:

RectangleModule1 DEFINITIONS ::=
BEGIN

Rectangle ::= SEQUENCE {
    height  INTEGER,
    width   INTEGER
}

END

2. Я выбрал варианты "Использовать собственные типы компьютеров" и "Создать поддержку PER".
3 . Это "Скомпилировано нормально", поэтому я скачал этот вывод .tgz
4. Создал пустой проект в Visual Studio 2010, перетащите-n -удаленные исходные файлы, извлеченные из этого .tgz
5. Установить дополнительный каталог включения в каталог "skeletons" ASN1C
6. Попытался собрать его.

Что мне не хватает?

Любая помощь будет оценена


person LihO    schedule 22.02.2012    source источник
comment
Я успешно использовал ASN1C в прошлом. Возможно, было бы лучше сосредоточиться на том, чтобы заставить это работать, прежде чем искать альтернативы?   -  person trojanfoe    schedule 22.02.2012
comment
Попробуйте посмотреть модуль yaz-asncomp и ODR проекта yaz www.indexdata.com   -  person guido    schedule 22.02.2012
comment
@trojanfoe: Вы успешно использовали ASN1C в Linux с помощью GCC, я думаю...   -  person LihO    schedule 22.02.2012
comment
@LihO Да, верно. Я предполагал, что это будет работать так же хорошо под MSVC.   -  person trojanfoe    schedule 22.02.2012
comment
@trojanfoe: После нескольких исправлений я заработал и под MSVC;) В любом случае спасибо   -  person LihO    schedule 22.02.2012


Ответы (2)


Проблема в том, что код, созданный ASN1C, должен быть изменен, чтобы скомпилировать его с помощью MSVC и использовать в среде Windows.

  1. #include <inttypes.h> следует заменить на #define ssize_t SSIZE_T
  2. #include <netinet/in.h> следует заменить на #include <Winsock2.h>
  3. ключевое слово inline должно быть удалено из static функций, определенных в asn_internal.h

После этого все работает ;)

person LihO    schedule 22.02.2012
comment
В VS2005 у меня он работал без каких-либо модификаций. - person OndrejP_SK; 26.03.2012

Убедитесь, что у вас есть правильный файл определения ASN. Затем перейдите по ссылке http://lionet.info/asn1c/asn1c.cgi.

вставьте свое определение ASN в данное окно. Нажмите кнопку «Продолжить компиляцию ASN.1». Если вы получите какую-либо ошибку компиляции, исправьте ее. После успешной компиляции будет сгенерирован код для вашего декодера. Попробуйте, это хорошо.

person paper.plane    schedule 22.02.2012