CommView позволяет подключить два типа пользовательских модулей
декодирования.
Простой декодер
Если он используется, то результаты его работы будут показаны в
дополнительной колонке закладки
Пакеты.
Пользовательский декодер должен быть 32-bit DLL с именем файла
"Custom.dll" и экспортировать единственную процедуру - "Decode".
Ниже показан её прототип на языках C и Pascal:
extern "C" {
void __stdcall Decode(unsigned char *PacketData, int PacketLen,
char *Buffer, int BufferLen);
}
procedure Decode (PacketData: PChar; PacketLen: integer; Buffer:
PChar; BufferLen: integer); stdcall;
Данная DLL должна располагаться в той же директории, что и
CommView. При запуске CommView ищет файл с именем
"Custom.dll" и загружает его в память. Если в нем найдена
точка входа "Decode" - CommView добавляет новую колонку с именем
"Custom" в списке пакетов.
Перед тем как отобразить новый пакет, CommView вызывает процедуру
"Decode" и передаёт содержимое пакета в DLL. Процедура "Decode"
должна обработать пакет и записать его в буфер. Первый аргумент -
указатель на содержимое пакета, второй - длина, третий аргумент -
указатель на буфер, в котором хранится результат обработки,
четвёртый аргумент - размер буфера (в данной версии - всегда 1024
байта). Буфер выделяется и освобождается самой программой CommView,
так что не следует управлять распределением памяти под этот буфер
самостоятельно. Содержимое буфера будет отображено в виде строки в
колонке "Custom".
Ваша процедура должно быть достаточно быстрой и обрабатывать тысячи
пакетов в секунду; в противном случае снизится производительность
программы. Не забывайте использовать STDCALL при вызове.
Две DLL представлены как пример. Они выполняют простейшие операции:
"результатом" работы функции "Decode" является шестнадцатеричный
код последнего байта пакета. Пользовательский декодер может быть
сколь угодно сложным.
·http://www.tamos.ru/products/commview/cust_decoder_c.zip.
Проект Visual Studio с исходниками на C++.
·http://www.tamos.ru/products/commview/cust_decoder_d.zip.
Проект Delphi с исходниками на Pascal.
Сложный декодер
При реализации этого типа декодера, результат будет отображаться,
как дополнительные элементы основного дерева декодера в окне
пакетов. Подробное руководство по созданию такого декодера можно
получить здесь:
http://www.tamos.com/products/commview/complex_decoder_c7.zip
Сложный декодер может быть написан только на Microsoft Visual C++,
так как он основан на классах C++.
Техническая поддержка
Техническая поддержка пользовательских декодеров осуществляется "по
мере сил", но мы не всегда сможем оказаться в состоянии разрешить
любую вашу проблему.
|