[英]Single DLL for multiple devices using the same driver
我尝试在用户应用程序和驱动程序之间设计一个第三方 DLL,它将能够管理通过 PCIe 连接到同一台 PC 的多个设备(相同型号)的通信。 单个 DLL 将放置在已知文件夹中,例如%SystemRoot%/System32 。 加载/卸载 DLL 应该调用一些函数,例如。 FindDevices()、OpenDevice()、CloseDevice() 将更新 DLL 中定义的结构,例如。 装置经理:
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 结构 {status[0], device[0]}。 如果 N 加载相同的 DLL,它是否能够看到 M 在 {status[0], device[0]} 或 M 中进行了更改,N 将有单独的 MANAGER 结构副本来处理?
如果 M 和 N不知道MANAGER 中所做的外部更改(MANAGER 不是“全局”),那么实现这一点的方法是什么? 它应该在较低层 - 驱动程序代码中管理吗?
如果 M 和 N知道MANAGER 中所做的外部更改(MANAGER 是“全局”),那么 OpenDevice() / CloseDevice() 是否是唯一需要修改 MANAGER 结构的函数?
感谢您对此事提出任何意见和建议。
这里有一些提示:
M
对MANAGER
的修改不会对应用程序N
产生任何影响
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.