在設定好registry 之後 還是沒有load到我寫的driver
感覺好像是沒有 USBDeviceAttach 這個函式。
但是我明明就有 implement , 而且也注意到了 .cpp 和 .c 的不同( function name decoration)
後來再做更詳細的確認,確定是 GetProcAddress( USBDeviceAttach ) 失敗( 但LoadLibrary 成功)
我想應該是此function 沒有 export 吧,果然。
加上 __declspec( dllexport ) (在此會跟 usbdi.h 的宣告衝突) 或
在 .def 裏加上 EXPORTS USBDeviceAttach 就解決了。
GetProcAddress 原來需要函式 為 exported 。否則找不到。
DllEntry
還有,PB很多driver 都是用 DllEntry 當入口,但是在 source 必須指定好 DLLENTRY
為 DllEntry 不然還是用 DllMain 較保險
補充:
DllEntry 和 DllMain 的差別
參考 http://msdn.microsoft.com/en-us/library/aa909718(v=winembedded.60).aspx
_DllMainCRTStartup (Preferred C runtime entry point for DLL) --> DllMain
_DllEntryCRTStartup( Basic C runtime entry point for DLL) --> DllEntry
預設 DLLENTRY MACRO 是 DllMain
_DllEntryCRTStartup 和 _DllMainCRTStartup 主要的差別是 _DllEntryCRTStartup 不會處理
Exception Handling 和 call _pRawDllMain (MFC 和ATL需要)
所以如果你用DllEntry 的話 DLLENTRY 也要設成 _DllEntryCRTStartup 或 DllEntry
沒有留言:
張貼留言