Я пытаюсь разработать стороннюю DLL между пользовательским приложением и драйвером, которая сможет управлять обменом данными с несколькими устройствами (одной модели), подключенными через P CIe к одному и тому же P C . Одна DLL будет помещена в известную папку, например, % SystemRoot% / System32 . Загрузка / выгрузка DLL должна вызывать некоторые функции, например. FindDevices (), OpenDevice (), CloseDevice (), которые обновят структуру, определенную в DLL, например. DeviceManager:
const int MAX_DEV_INSTANCES;
typedef struct DEV_STATUS_T {
BOOL swConnected; // State of SW connection
UINT32 swConnIdx; // ID of SW app
BOOL hwConnected; // State of HW connection
UINT32 hwPortIdx; // ID of port for HW
} DEV_STATUS;
typedef struct DEV_MANAGER_T {
UINT32 devicesNr;
DEV_STATUS status[MAX_DEV_INSTANCES];
DEVICE device[MAX_DEV_INSTANCES];
} MANAGER;
MANAGER manager;
Предположим, у нас есть 2 устройства: A, B и 2 приложения: M, N. Оба они пытаются подключиться к одному отдельному устройству: M контролирует A, N контролирует B.
Мои вопросы:
Предположим, M загружает DLL и обновляет DLL MANAGER struct {status [0], device [0]}. Если N загружает ту же DLL, сможет ли он увидеть, что M внес изменения в {status [0], device [0]} или M, N будут иметь отдельные копии структур MANAGER, с которыми нужно работать?
Если M и N не осведомлены о внешних изменениях, сделанных в MANAGER (MANAGER не является «глобальным»), как достичь этого? ? Должен ли он управляться на нижнем уровне - код драйвера?
Если M и N осведомлены о внешних изменениях, сделанных в MANAGER (MANAGER - 'global '), будет ли OpenDevice () / CloseDevice () единственными функциями, которым необходимо изменить структуру MANAGER?
Спасибо за любые комментарии и предложения по этому поводу .