阅读:3614回复:27
pc模拟环境下是否可以通过ActiveDeviceEx加载驱动?
我已经把注册表和驱动DLL的接口全部准备好了,可是调用ActiveDeviceEx就是不成功
|
|
沙发#
发布于:2007-05-29 15:30
在版主和其他朋友的帮助下解决了问题
应该具体写出来以便后来的朋友参考 这么只进不出怎么行? |
|
板凳#
发布于:2004-12-10 18:26
我的调用ActivateDeviceEx函数的问题也解决了,再次也要谢谢wxl_50685330大哥。 :P
|
|
|
地板#
发布于:2004-12-10 16:36
哈,知道了
|
|
地下室#
发布于:2004-12-10 16:36
看到了
|
|
5楼#
发布于:2004-12-10 16:35
不会给分了,告诉我一声,给你加上
|
|
6楼#
发布于:2004-12-10 16:33
没办法,我刚开始学wince,很多东西都不了解,非常感谢wxl_50685330,希望以后能得到更多指导,不要嫌烦哦,hehe,有机会请你吃饭 :)
|
|
论坛版主
![]() |
7楼#
发布于:2004-12-10 14:08
哈哈,你娃终于搞定了,唉,有点儿劳命伤财的感觉,恭喜恭喜!!!
|
|
8楼#
发布于:2004-12-10 10:28
hehe,搞定,是open函数的问题。
|
|
9楼#
发布于:2004-12-09 16:59
hehe,还几个事情不太清楚,想请教wxl_50685330:
1:应用程序调用ACtivateDeviceEx时,驱动里的XXX_Init应该被调用吧,可是我发现我在Init里的打印信息并没有输出, DLLMain里信息的也没有输出, 但是注册表里的Active键已经添加了我的驱动的信息。 2:我用设备名 TST0: 打开设备的时候,返回的句柄无效,错误代码时55,设备不存在, 这是为何? |
|
10楼#
发布于:2004-12-09 16:20
就是ptr的问题,不该加HKEY_LOCAL_MACHINE,
的确应该是LPCWSTR ptr= TEXT("Drivers\\MyDriver\\JD45") :) |
|
11楼#
发布于:2004-12-09 16:18
wxl_50685330
你真神了,太谢谢你了,我终于加载成功了,感激涕零 |
|
论坛版主
![]() |
12楼#
发布于:2004-12-09 16:07
等等,我好像知道了!!!!
LPCWSTR ptr= TEXT("Drivers\\\\MyDriver\\\\JD45") |
|
论坛版主
![]() |
13楼#
发布于:2004-12-09 16:01
能重新链接os不?再试试把dll放到bib的modules里面呢
|
|
论坛版主
![]() |
14楼#
发布于:2004-12-09 15:58
哈哈哈哈,不是吧,还是不行?是不是非要我亲自动手麻:)))
对了,是两个\\喔,实在不行... |
|
15楼#
发布于:2004-12-09 14:30
.def里面LIBRARY drvdll 也改成LIBRARY STRATAD
:( 55555 |
|
16楼#
发布于:2004-12-09 14:28
我的程序里本来是:LPCWSTR ptr= TEXT("HKEY_LOCAL_MACHINE\\Drivers\\MyDriver\\JD45");拷贝的时候掉了\\
我在注册表里添加了Flag 设为2 可是还是不行,返回仍然是0 |
|
论坛版主
![]() |
17楼#
发布于:2004-12-09 14:05
2.LPCWSTR ptr= TEXT("HKEY_LOCAL_MACHINE\\\\Drivers\\\\MyDriverJD45");
|
|
论坛版主
![]() |
18楼#
发布于:2004-12-09 14:04
我试试哈
1.你的drvdll.dll放到什么地方的?试试放到\\windows下 2.LPCWSTR ptr= TEXT("HKEY_LOCAL_MACHINE\\Drivers\\MyDriverJD45"); 3..def里面LIBRARY drvdll写成LIBRARY STRATAD 4.在注册表设"Flags"=dword:00000002 再试试呢 |
|
19楼#
发布于:2004-12-09 10:19
to wwei_wang: 不知你成功没有,如果成功是什么原因呀?我的ActivatedeviceEx还是不行.
to wxl_50685330: 我现在不用模拟环境了,用一个工控主板加wince,evc装了该主板的sdk,重复以前的工作,编写dll,修改注册表,应用程序调用ActivateDeviceEx, 发现dll还是没有加载,苦闷呀。现在把所有的程序贴出来,wxl_50685330一定帮我看看。 def文件: LIBRARY drvdll EXPORTS TST_Init TST_Deinit TST_Open TST_Close TST_Read TST_Write TST_Seek TST_IOControl TST_PowerUp TST_PowerDown dll的cpp文件: #include "stdafx.h" typedef class CDriverContext * PDriverContext, * HDRIVER; typedef struct _tag_OPENHANDLE { HDRIVER hDriver; } OPENHANDLE, *POPENHANDLE; BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) { RETAILMSG(1, (TEXT("enter dllmain"))); return TRUE; } BOOL TST_Init( PCTSTR pszActiveKey ) { RETAILMSG(1, (TEXT("enter init"))); return TRUE; } BOOL TST_Deinit( ) { return TRUE; } VOID TST_PowerUp(HDRIVER pDriver) { } VOID TST_PowerDown( HDRIVER pDriver ) { } POPENHANDLE TST_Open( HDRIVER pDriver, DWORD dwAccess, DWORD dwShareMode ) { return NULL; } BOOL TST_Close( POPENHANDLE pOpenHandle ) { return TRUE; } DWORD TST_Read( POPENHANDLE pOpenHandle, LPVOID pBuf, DWORD Len ) { return 0; } DWORD TST_Write( POPENHANDLE pOpenHandle, LPCVOID pBuf, DWORD Len ) { return 0; } DWORD TST_Seek( POPENHANDLE pOpenHandle, long pos, DWORD type ) { return (DWORD)-1; } BOOL TST_IOControl( POPENHANDLE pOpenHandle, DWORD dwCode, PVOID pBufIn, DWORD dwLenIn, PDWORD pdwBufOut, DWORD dwLenOut, PDWORD pdwActualOut ) { return TRUE; } 修改注册表程序: int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { HKEY hKey; LPDWORD p = 0 ; TCHAR ch[] = TEXT("Drivers\MyDriver\JD45"); LONG rc = RegCreateKeyEx(HKEY_LOCAL_MACHINE, ch, 0, NULL, 0, NULL, NULL, &hKey, p); if(rc != ERROR_SUCCESS) { RegCloseKey (hKey); } TCHAR Dllname[] = TEXT("drvdll.dll"); rc = RegSetValueEx(hKey, TEXT("Dll"), 0, REG_SZ, (PBYTE)Dllname, (lstrlen (Dllname)+1) * sizeof(TCHAR)); TCHAR Prefix[] = TEXT("TST"); rc = RegSetValueEx(hKey, TEXT("Prefix"), 0, REG_SZ, (PBYTE)Prefix, (lstrlen (Prefix)+1) * sizeof (TCHAR)); DWORD index = 0; rc = RegSetValueEx(hKey, TEXT("Index"), 0, REG_DWORD, (PBYTE)&index, 4); DWORD order = 1; rc = RegSetValueEx(hKey, TEXT("Order"), 0, REG_DWORD, (PBYTE)&order, 4); RegCloseKey (hKey); return 0; } 加载驱动程序: int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { LPCWSTR ptr= "HKEY_LOCAL_MACHINE\Drivers\MyDriver\JD45"; DWORD m; HANDLE hDev = ActivateDeviceEx(ptr, NULL, 0, NULL); m = GetLastError(); RETAILMSG(1, (TEXT("ActivateDevice code = %drn")),m); return 0; } 将dll下载到目标板,运行修改注册表的程序,发现注册表已经改变,运行加载程序,发现hDev仍然是0,看到到打印出来的错误码是59。不知道哪里除了问题。 |
|
上一页
下一页