Милостивые господа!!!
В результате долгих и тяжелых раздумий было решено все переделать :-((((((((((
Изменена идеология общения с библиотекой работы с БД.
Решено, что при осуществлении запроса память отводит не пользователь, а сама библиотека БД.
Функция запроса к БД возвращает указатель на отведенную функцией память с прочитанными данными.
После этого Клиент должен сразу отвести требуемое количество памяти под соответствующие данные и скопировать данные, возвращенные из функции запроса, в свой кусок памяти.
Далее надо попросить БД очистить память, отведенную под данные запроса. Последнее делается с помощью вызова той же самой функции (см. ниже).

С точки зрения синтаксиса функций, внесены изменения в описания функций - теперь вместо указатель на объект данных (CSensor/CMessageEvent/CMessageCommand) в функцию передается указатель на указатель на соотв. структуры. Также оказался ненужным идентификатор выборки - в БД просто повторно передается указатель на отведенную ею память, а она (БД) его чистит.
Т.о. мы имеем следующие описания функций:

int (*FInitDBSensors)(const char *ConfigWD);
int (*FDBGetSensors)(int *N, CSensor **s);
//if(N==NULL&&s==NULL) return sizeof(CSensor)
//if(N!=NULL&&s!=NULL) => fill *n and set *s
//if(N==NULL&&s!=NULL) => clean memory, allocated for s



int (*FInitDBEvents)(const char *ConfigWD);
int (*FDBGetEvents)(int *N, CMessageEvent **event, CMessageEventRequest *request);
//if(N==NULL&&event==NULL) return sizeof(CMessageEvent)<<16+sizeof(CMessageEventRequest)
//if(N!=NULL&&event!=NULL) => fill *n and set *event
//if(N==NULL&&event!=NULL) => clean memory, allocated for event



extern int (*FInitDBCommands)(const char *ConfigWD);
extern int (*FDBGetCommands)(int *N, CMessageCommand **Command, CMessageCommandRequest *request);
//if(N==NULL&&Command==NULL) return sizeof(CMessageCommand)<<16+sizeof(CMessageCommandRequest)
//if(N!=NULL&&Command!=NULL) => fill *n and set *Command
//if(N==NULL&&Command!=NULL) => clean memory, allocated for Command


//==========================================================================
ДАЛЕЕ ВСЕ СТАРОЕ!!!
//==========================================================================
2)Предлагается формат функций добавления записи в БД:

int FDBPutEvent(CMessageEvent *event);
int FDBPutCommand(CMessageCommand *cmd);


3)Предлагается формат стандартных команд:

Start :MessageType=1; CommandType=1;
Stop :MessageType=1; CommandType=2;
Restart :MessageType=1; CommandType=3;
Kill :MessageType=1; CommandType=4;

4)Забыл, о чем мы договаривались: в каком виде передавать параметры.
Напомню, что существуют типы параметров:
1)int
2)double
3)string

В данной реализации я предполагаю, что параметры передаются в бинарном виде, т.е.
для int LVar=4
для double LVar=8
для string LVar=sizeof(Var)+1

Если есть потребность все параметры передавать в виде их текстового представления,
то просьба об этом сообщить.

остальные поля структуры CMessageCommand не принципиальны

//==========================================================================
//------------------------------------------------------------
class CSensor
{public:
//--
int SensorType;
char *SensorID; int LSensorID;
char *Description; int LDescription;
//-- for KEEPALIVE:
int MessageType;//1)IsAlive; 2)IsDead
time_t EventTime;
int Status;//bits: 1=Alive/Not alive
//--
};
//------------------------------------------------------------
class CMessageEventParam
{public:
//--
int Type;//text: 1)int; 2)double; 3)text
char *Name;int LName;//0-terminated
char *Val; int LVal;
//--
};
//==========================================================================
class CMessageEvent
{public:
//---
int MessageType;
char *SensorID; int LSensorID;
int MessageID;
int SensorType;
char *EventName; int LEventName;
time_t EventTime;
int ParNum;
CMessageEventParam *par;
//---
};
//==========================================================================
class CMessageEventRequest
{public:
//--
int NMax;int TakeFirst1_Last0;
int MessageID0,MessageID1; int UseMessageID0,UseMessageID1;
int MessageType; int UseMessageType;
char *SensorID; int LSensorID; int UseSensorID;
int SensorType; int UseSensorType;
char *EventName; int LEventName; int UseEventName;
time_t EventTime0; int UseEventTime0;
time_t EventTime1; int UseEventTime1;
//--
};
//==========================================================================
class CMessageCommand
{public:
//---
int MessageType;
char *SensorID; int LSensorID;
int CommandID;
int CommandType;
time_t EventTime;
int ParNum;
CMessageEventParam *par;
//---
};
//==========================================================================
class CMessageCommandRequest
{public:
//--
int NMax;int TakeFirst1_Last0;
int MessageType; int UseMessageType;
char *SensorID; int LSensorID; int UseSensorID;
int CommandID0,CommandID1; int UseCommandID0,UseCommandID1;
int CommandType; int UseCommandType;
time_t CommandTime0; int UseCommandTime0;
time_t CommandTime1; int UseCommandTime1;
//--
};
//==========================================================================