调用函数 CreateFile( LPCTSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes,
DWORD dwCreationDispostion, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile);
打开对应的驱动文件,该函数应该对应XXX_Open(DWORD hDeviceContext, DWORD AccessCode, DWORD ShareMode),其中hDeviceContext应该是XXX_Init()函数
返回的设备上下文句柄,为什么我在XXX_Open函数里打印输出显示hDeviceContext为1,而不是设备句柄?
调用CreateFile("XXX0:", ) 函数时,应该去drivers\active中去查找XXX0:对应的设备句柄hWnd,然后传到XXX_Open函数里面去的,而实际上却不是这么实现的?
为什么会这样?
hDeviceContext为什么没有传递到XXX_Init()函数中去? 我现在两次调用哪个该DLL驱动,需要在hDeviceContext变量在程序里去区分不同的设备
借题发挥一下,呵呵
为什么我用CreateFile打开不了dll,而用LoadLibrary却能打开呢?
已結帖的問題要不要回呢??
1. hDeviceContext 是 xxx_Init 的返回值, 其 type 為 DWORD, 所以若其值永遠為1, 那八成你 xxx_Init 最後一行是 return TRUE;
若真要分別, 正統的作法是在 xxx_Init 中用 LocalAlloc 自 Heap 取得一塊記憶體, 並將原程式中 Global variable 以結構方式全部放入該記憶體中, 並將該記憶體當作 xxx_Init 的回傳值, 在 xxx_Open 中要做存取時, 則透過 hDeviceContext 來取用. 這部份可參考 Serial Port 的 driver code.
2. CreateFile 的回傳值是 FileSystem 用的, 與 xxx_Init 的回傳值沒有直接的關係.
Paul, Chao @ Techware