Я вобщемто это и пытался сделать... но видимо 8 часаов дебага сделали свое дело....
Структура ПО
1) Сервер связи, VC7.0, рабатает не посредственно с "тупыми" приборами, с точки зрения клиента это TCP/IP порт к которому можно присоеденися и отсылая структуры вида
рис 1#define DLS_DATA_FRAME 32
typedef struct dls_Query_Pak
{ BYTE Start; //Признак начала пакета
long id_pak;//индатификатор пакета
long id_counter;//Индатификатор прибора
short id_param;//индатификатор параметра
BYTE id_RetType;//код ожидаемого типа данных
BYTE m_LenData;// Длина поля данных для команд требующих пересылки параметра
BYTE m_Data[DLS_DATA_FRAME];//собственно поле данных
BYTE Stop;//признак конца пакета
}dls_Query_Pak;
Получить данные в виде пакета тогоже формата при этом в поле данных будет лежать значение запрошеного параметра в формате согласно значениею поля
id_RetType. Особенность заключается в том что не которые наши контролеры специально запрограмированы и поддерживают этот же протокол(TCP/IP порт и запросы указаного вида.... те клиент должен бы в итоге работать как через сервер так и на прямую с утройством)
2) ATL модуль (VC7.0) имплементирующий ряд функций, восновном перобразования структуры в строку и наоборот (вижуал бейсик не умеет этого делать а принимать в качестве параметра метода me.Winsock1.SendData труктуру отказывается...)
3)Тестовое приложение на VB которое имеет несколько объектов Winsock(один к серверу другие напрямую к устроствам ) и загруженный ATL модуль.
Схема работы такая
1) из ATL библиотеки берется стркутура (рис 1), заполняется,
2) вызывается метод(из ATL) который выполняет преобразование структуры с строку(на самом деле просто копирует область памяти и говорит "Это строка" ),
3)строка передается в качестве параматра Winsock1.SendData,
4) на принимающей стороне сервер накладывает на буфер этуже структуру
(описана в одном файле и инклюдятся и в проект сервера и в проект ATL),
5)формирует ответ, отсылает клинету,
6)клиет принимает пакет (опятьже в виде строки) и передает ее другой функции ATL объекта
7) Функция копирует строку в другую область памяти и говорит "Это структура" и возвращает ее
Эта схема великолепно работала при обмене через сревер, но при попыке присоеденится к устройству начались проблемы... разбор показал что на устройство приходит пакет длиней чем должен быть...
Расмотрев ситуацию я обнаружил что по какойто причине структура не монолинатна, и содержить не используемые ячейки памяти (что привел в табличке с дамбом) при этом количество байт прибавляемыхк структуре меняется взависимости от длинны структуры. Выравнивание? Но если это вы равнивание то какого рожна появляются те три байта в начале структуры?