3489|8

77

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

WinCE驱动开发过程求教 [复制链接]

我的目的是通过写一个空的设备dll,再写个上层的简单程序来访问我的设备驱动dll,就是一个简单的HelloWorld,看看对于dll入口和接口十否设计对,注册设备、上层访问,这3步能否走通。

我用EVC编译出一个dll,并通过EVC上载到设备上:
cpp代码如下(H里的定义为空):
DWORD
DAB_Init(DWORD dwContext)
{
        return 0;
}

BOOL WINAPI
DllEntry(HANDLE hInstDll, DWORD dwReason, LPVOID lpvReserved)
{
    switch ( dwReason )
        {
    case DLL_PROCESS_ATTACH:
//        RETAILMSG(1, (TEXT("PwrButton : DLL_PROCESS_ATTACH\r\n")));
                DisableThreadLibraryCalls((HMODULE) hInstDll);
        break;

    }
    return (TRUE);
}

BOOL
DAB_Close(
    DWORD Handle
    )
{
    return TRUE;
}   // DSK_Close


//
// Device deinit - devices are expected to close down.
// The device manager does not check the return code.
//
BOOL
DAB_Deinit(
    DWORD dwContext     // future: pointer to the per disk structure
    )
{
    return TRUE;
}   // DSK_Deinit


//
// Returns handle value for the open instance.
//
DWORD
DAB_Open(
    DWORD dwData,
    DWORD dwAccess,
    DWORD dwShareMode
    )
{
    return 0;
}   // DSK_Open

//
// I/O Control function - responds to info, read and write control codes.
// The read and write take a scatter/gather list in pInBuf
//
BOOL
DAB_IOControl(
    DWORD Handle,
    DWORD dwIoControlCode,
    PBYTE pInBuf,
    DWORD nInBufSize,
    PBYTE pOutBuf,
    DWORD nOutBufSize,
    PDWORD pBytesReturned
    )
{
    return FALSE;
}   // DSK_IOControl


DWORD DAB_Read(DWORD Handle, LPVOID pBuffer, DWORD dwNumBytes)
{
        return 0;
}
DWORD DAB_Write(DWORD Handle, LPCVOID pBuffer, DWORD dwNumBytes)
{
        return 0;
}
DWORD DAB_Seek(DWORD Handle, long lDistance, DWORD dwMoveMethod)
{
        return 0;
}

void DAB_PowerUp(void)
{
        return;
}

void
DAB_PowerDown(void)
{
        return;
}


编译时连接使用dabdll.def:
LIBRARY DABDLL

EXPORTS DAB_Init
        DAB_Deinit
        DAB_Open
        DAB_Close
        DAB_Read
        DAB_Write
        DAB_Seek
        DAB_IOControl
        DAB_PowerDown
        DAB_PowerUp


问题:1.对于注册表,BuiltIn下建立一个键值叫dabdll里面的Order、Prefix、Index的作用是什么?Prefix可以留空吗?(我随便设置了Order为1,Index为0,Prefix为一个不存在的内容)
2.假设我的dll做好了,做对了,那么如何加载使用呢?我看到这样一个例子:
void   
  main   (   
              DWORD hInstance,   
              DWORD   hPrevInstance,   
              TCHAR   *pCmdLine,   
              int nShowCmd)   
  {   
          HANDLE   hTestDevice;   
          HANDLE   TestDevice;   
        
          TestDevice   =   RegisterDevice(TEXT("PCM"),   1,   TEXT ("devtuple.dll"),   0);   
          if   (TestDevice   ==   0)   {   
                  NKDbgPrintfW(TEXT("TupleTst:   RegisterDevice(devtuple.dll)   failed   %d\r\n"),   
                          GetLastError());   
                  return;   
          }   
但我不清楚设备是如何通过上层文件访问的呢?TEXT这个函数以及RegisterDevice需要#include哪些头?
如何从注册表中看出这段注册的程序是成功调用并返回的?
3.如果我不想通过这样注册,那么通过注册表方式注册给系统,每次开机都要自动加载,注册表如何写呢?
4.谁能给更多的代码示例,如何注册一个设备,加载、访问、卸载,即能看到XXX_Init,XXX_Open,XXX_Close之类的接口函数被成功调用,我对这层的开发很无知。

谢谢了各位!

最新回复

学习了  详情 回复 发表于 2010-3-27 14:51
点赞 关注

回复
举报

72

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
1.这个问题去看看msdn比较好,说的很详细。
2.你这个dll是流驱动,系统会加载的。
3.不知道什么意思
4.看msdn
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
说实话,我都不知道去MSDN哪里看,因为我连基本的流驱动开发过程都不清楚,不清楚驱动整体的架构模式,和常用的一些函数以及使用驱动的函数,去MSDN那里查哪些函数都不知道。MSDN我看过,一些函数用法还是没看懂,都没例子。我需要能走通了例子。
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

4
 
1.Order是加载顺序置0即可,Prefix是DAB,Index是索引号,对应你的设备如DAB1:;
3注册表
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\dab]
        "Index"=dword:1
        "Prefix"="DAB"
        "Dll"="dab.dll"
        "Order"=dword:0
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(初级)

5
 
注册表的键都有用,是用来供驱动自动加载的,加载后应用程序才能访问驱动程序的功能。
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

6
 
找本书看看吧,这些问题就都明白了,你这是实现一个最简单的流接口驱动,如何写注册表,如何读写,随便一本wince的书都会有介绍的。
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

7
 
查看本帖全部讨论,请登录或者注册
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

8
 
查看本帖全部讨论,请登录或者注册
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

9
 
查看本帖全部讨论,请登录或者注册
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
报名最后一周!2025 英飞凌消费、计算与通讯创新大会-北京站
会议时间:3月18日(周二)09:30签到
参会奖励:电动螺丝刀套装、户外登山包、京东卡

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表