数学建模社区-数学中国

标题: 老大,怎麼寫并行口呢?用到哪些API函數阿 [打印本页]

作者: kenneth    时间: 2004-6-1 14:39
标题: 老大,怎麼寫并行口呢?用到哪些API函數阿

原來都寫串口的,現在要我寫并行口還有USB口

0 u- [# i. i1 n: u

我暈,看來這回死定了

, D7 J+ @3 I0 E* J

我連并口用到哪些API函數都不知道

3 ^4 K8 _ P( u

老大救命哦

[em06]
作者: kenneth    时间: 2004-6-1 14:40
而且書上都找不到哦
作者: ilikenba    时间: 2004-6-1 23:28

API之打印函数: @1 d7 V' g# ~. z1 o0 Q. E9 ^AbortDoc 取消一份文档的打印 2 g% w5 [! i- Q AbortPrinter 删除与一台打印机关联在一起的缓冲文件 ' w8 [- m+ b- c; k3 I AddForm 为打印机的表单列表添加一个新表单 3 p+ m9 G0 c3 u: N) z- T AddJob 用于获取一个有效的路径名,以便用它为作业创建一个后台打印文件。它也会为作业分配一个作业编号 * H9 Z" n4 q& r; ]7 d* fAddMonitor 为系统添加一个打印机监视器 4 v `: B4 n% I) V& u& ?9 X/ q AddPort 启动“添加端口”对话框,允许用户在系统可用端口列表中加入一个新端口 & `( T* W" x% B a: I! ` AddPrinter 在系统中添加一台新打印机 4 u( Z& M. @0 \4 d9 W+ X AddPrinterConnection 连接指定的打印机 0 K! {5 { U# z5 Q) p3 _/ _# jAddPrinterDriver 为指定的系统添加一个打印驱动程序 6 _2 [) ]& v+ lAddPrintProcessor 为指定的系统添加一个打印处理器 ; `9 @7 L1 [* L" {6 I$ A9 BAddPrintProvidor 为系统添加一个打印供应商 " L6 d+ T' y4 S7 |8 [ AdvancedDocumentProperties 启动打印机文档设置对话框 * h4 S& {. `1 i7 bClosePrinter 关闭一个打开的打印机对象 9 s: P2 n" z H# [, c: _: H ConfigurePort 针对指定的端口,启动一个端口配置对话框 c, q. R1 m3 l: M9 @ ConnectToPrinterDlg 启动连接打印机对话框,用它同访问网络的打印机连接 : T) G1 L+ {- n* A0 r: f6 e8 I DeleteForm 从打印机可用表单列表中删除一个表单 5 X! ~8 D6 [% y& z5 a5 DDeleteMonitor 删除指定的打印监视器 * f$ W3 A9 s, h. t DeletePort 启动“删除端口”对话框,允许用户从当前系统删除一个端口 + K5 A7 S! I9 v: o3 I wDeletePrinter 将指定的打印机标志为从系统中删除 # V3 r" K. I' j DeletePrinterConnection 删除与指定打印机的连接 - j; J6 ~$ j7 j DeletePrinterDriver 从系统删除一个打印机驱动程序 : Z ]% j% z( n" q2 } DeletePrintProcessor 从指定系统删除一个打印处理器 + ` ?2 S! n0 J% DDeletePrintProvidor 从系统中删除一个打印供应商 % w* k0 n- {, B3 x) k' ], t4 F$ r9 P DeviceCapabilities 利用这个函数可获得与一个设备的能力有关的信息 5 ^3 b! W+ o& A9 R# I$ QDocumentProperties 打印机配置控制函数 6 E( z& p" f# A EndDocAPI 结束一个成功的打印作业 . }# P( E" V# ^( f3 O& J( H EndDocPrinter 在后台打印程序的级别指定一个文档的结束 ) _5 @; d( l+ R JEndPage 用这个函数完成一个页面的打印,并准备设备场景,以便打印下一个页 . \ m! F- u, J3 eEndPagePrinter 指定一个页在打印作业中的结尾 : d" z o7 y8 i) x6 Y* n! c8 e; |5 h: q EnumForms 枚举一台打印机可用的表单 / f. m( w! w. z( O EnumJobs 枚举打印队列中的作业 ( F' l( |+ O) q2 R EnumMonitors 枚举可用的打印监视器 $ R& D3 i" o& m EnumPorts 枚举一个系统可用的端口 , C0 {) x4 k8 I0 e$ m7 nEnumPrinterDrivers 枚举指定系统中已安装的打印机驱动程序 8 Q! n6 I @) F. G# N5 BEnumPrinters 枚举系统中安装的打印机 5 C( d1 G& c6 M1 F* l: e EnumPrintProcessorDatatypes 枚举由一个打印处理器支持的数据类型 . q9 _* k5 A7 e5 vEnumPrintProcessors 枚举系统中可用的打印处理器 3 Q N' u. Z7 q+ V. B; P' n- [Escape 设备控制函数 9 b9 \0 j, t S$ e FindClosePrinterChangeNotification 关闭用FindFirstPrinterChangeNotification函数获取的一个打印机通告对象 $ |: ~) M) _( m5 ~. K( q6 @ FindFirstPrinterChangeNotification 创建一个新的改变通告对象,以便我们注意打印机状态的各种变化 # o5 S! M- ]; m9 J/ v c7 @ FindNextPrinterChangeNotification 用这个函数判断触发一次打印机改变通告信号的原因 % K# p9 N- t) H, a; q' P4 `FreePrinterNotifyInfo 释放由FindNextPrinterChangeNotification函数分配的一个缓冲区 ) |- O0 n! R- t7 n- q GetForm 取得与指定表单有关的信息 , D# R5 u5 I9 D& YGetJob 获取与指定作业有关的信息 ! ~+ P, e8 R! G. M( Z& hGetPrinter 取得与指定打印机有关的信息 : l0 {3 D2 T6 V) h2 GGetPrinterData 为打印机设置注册表配置信息 ; Z8 @2 v7 \. l9 p7 N9 m4 S8 p GetPrinterDriver 针对指定的打印机,获取与打印机驱动程序有关的信息 + E5 ~: ]: M+ b; S GetPrinterDriverDirectory 判断指定系统中包含了打印机驱动程序的目录是什么 % H& H" D0 ?( ?! ^5 m GetPrintProcessorDirectory 判断指定系统中包含了打印机处理器驱动程序及文件的目录 ; J, e. F4 ~+ P0 @6 E9 F/ h/ ~OpenPrinter 打开指定的打印机,并获取打印机的句柄 2 W/ o% H# N+ ?$ Q ^% z9 t PrinterMessageBox 在拥有指定打印作业的系统上显示一个打印机出错消息框 * F! |2 G% A' G' o PrinterProperties 启动打印机属性对话框,以便对打印机进行配置 1 v8 u9 f+ J; Q ReadPrinter 从打印机读入数据 6 f3 w Y7 C7 q" w" m7 g- x" F& YResetDC 重设一个设备场景 . l/ J& @; s' g' z- ]3 hResetPrinter 改变指定打印机的默认数据类型及文档设置 3 P4 ?' r9 [) e9 \* @" } ScheduleJob 提交一个要打印的作业 ! N$ I( j& O0 q5 x3 f" xSetAbortProc 为Windows指定取消函数的地址 : ^& C1 _' F" x7 q( |* } SetForm 为指定的表单设置信息 : Y8 I! ?! g8 t% t* JSetJob 对一个打印作业的状态进行控制 $ l5 n) W$ j( }& p- e" g SetPrinter 对一台打印机的状态进行控制 A1 Z. w, u" K. u; V SetPrinterData 设置打印机的注册表配置信息 9 A, ]) q- d9 d. p! K8 X StartDoc 开始一个打印作业 ) U$ M* z& W# \ StartDocPrinter 在后台打印的级别启动一个新文档 * G/ u$ F: F# YStartPage 打印一个新页前要先调用这个函数 1 C5 L4 R% m, M5 v. ?4 EStartPagePrinter 在打印作业中指定一个新页的开始 5 r. W* [" U; J/ X0 s/ W' LWritePrinter 将发送目录中的数据写入打印机 ! W0 x8 F9 |7 y7 T9 \+ S9 g# k7 e2 b


作者: ilikenba    时间: 2004-6-1 23:34

看到这样一个usb通讯的帖子,可能对你有用!

主  题: 关于usb通讯方面的问题。请AKing大哥及相关高手来看看,万分感激!!! # w' W' G6 _/ e P* Y. x) G作  者: aiyu33 () 7 o* X$ ~- w+ z, l0 ~9 C等  级: ; b2 d8 F6 \+ Y: p2 _7 g/ n( ?信 誉 值: 100 K# a2 ~; [& I. b2 U% J: f7 n6 l 所属论坛: C++ Builder Windows SDK/API + y) A1 H1 N1 [/ ~3 ?5 d/ Z# f' g5 a 问题点数: 100 & l' d R! a f6 l, ~ 回复次数: 12 ) i9 | Y, N; c2 a4 [% B: y 发表时间: 2003-12-16 20:43:13 " Y9 f5 F6 x5 f! ?& y , T1 E y% w8 H+ C& M 2 C) E; t4 e8 ?5 ?9 L9 r

最今我接到了开发pc和pocket pc通过usb口通讯的任务。这两个星期我参考了很多方面的资料,特别是AKing大哥写的一些文章。但我始终没有打通这个关口,我贴出我的代码请AKing大哥看看,现在很急,多谢。 ' s" x/ M& `9 r$ g: O# npc的os是windows2000professional) w" n# d) A q1 `/ l Q# g3 {! w$ z pocket pc是hp ipaq 2210,os 是pocket pc2003。 % l/ t" w% E3 J3 p6 m: m* g6 q4 N/ y我装了activesync3.7。我查看过了,这个activesync目录下有pocket pc的驱动程序。pc也能识别。 - |2 z' \) O7 w& a0 Y. q$ I! v8 k下面是我在pc上调用usb的代码。& e% ^4 b1 p2 n# e$ ] 下面的代码我能打开hidn类型的usb,但是就是不能打开pocket pc的usb。% _' ^' T. J3 M' Q //classGuid = {25dbce51-6c8f-4a72-8a6d-b54c2b4fc835}) A0 r8 A: ]4 Y' b2 x DEFINE_GUID(GUID_CLASS_PALM, 2 n( I5 u9 k5 E! b+ `( f$ R 0x25dbce51, 0x6c8f, 0x4a72, 0x8a, 0x6d, 0xb5, 0x4c, 0x2b, % x/ t/ B3 C' n( Q4 _4 S- p" d 0x4f, 0xc8, 0x35);# X# _6 L" d+ v7 t, O% T GUID HidGuid = GUID_CLASS_PALM; ! G0 a: l$ ]; THANDLE Get_DeviceHandle( GUID* pGuid) t3 {: j+ A/ M& T{ ! A7 }4 |. z* V) C- l6 D- K1 G 3 ]4 y7 e4 Q8 l6 U% K HDEVINFO info = SetupDiGetClassDevs(pGuid, NULL, NULL, DIGCF_PRESENT | DIGCF_INTERFACEDEVICE);' U# w0 }1 z' Y) |5 G* I* w6 G5 @' M8 l # O0 U9 ~. O/ t if(info==INVALID_HANDLE_VALUE) % c" ?; k& O& U8 z: X' V( M { 8 F( h( J/ R& a0 E7 W7 E" p printf("No HDEVINFO available for this GUID\n");. H/ n7 G: @2 S& m; r( p return NULL; & [5 c5 ?, T2 m1 l' j: r# j } : j B ]2 u) o1 X SP_INTERFACE_DEVICE_DATA ifdata;1 h& s' K& U1 V* W D ifdata.cbSize = sizeof(ifdata);; i+ Q6 G3 w5 P# _; Y( k //0000是我在注册表中找到的序号 ! _* E1 ^( i8 n' E4 _% P if(!SetupDiEnumDeviceInterfaces(info, NULL, pGuid, 0000, &ifdata))9 K4 d* |3 b9 L; m$ I, m6 J. F {) k2 C1 v# L# o- Y/ e2 V" h# b printf("No SP_INTERFACE_DEVICE_DATA available for this GUID instance %d \n", instance+1);9 `( O( [7 j& K/ {+ T& b SetupDiDestroyDeviceInfoList(info);; J* U% Y# T( g# x" s return NULL;6 i& r2 p% l% ?( z* v }

// Get size of symbolic link name 1 z* ?# X4 o6 h9 T* n' s DWORD ReqLen;1 W% T* p! V3 t! P& g2 A5 l - f# Q1 g' X( q% { S* r SetupDiGetDeviceInterfaceDetail(info, &ifdata, NULL, 0, &ReqLen, NULL);. y2 m5 r7 ~: ~1 |) @ 4 S" ?5 \" ~" |/ j PSP_INTERFACE_DEVICE_DETAIL_DATA ifDetail = (PSP_INTERFACE_DEVICE_DETAIL_DATA)(new char[ReqLen]); ! s( [" i! W8 F" ?7 z9 R 6 g7 H! c @6 h4 s0 R0 k9 G- f) H1 Q+ b if( ifDetail==NULL)+ s6 l2 z& Z+ [- R; l {$ g+ M0 X/ ^6 m SetupDiDestroyDeviceInfoList(info); & d) a% E5 S7 V) f return NULL; # I& v4 `3 Y4 d1 X( q }

// Get symbolic link name$ O, W4 }' Y: [, b+ W' D& w( u! `/ W4 [ ifDetail->cbSize = sizeof(SP_INTERFACE_DEVICE_DETAIL_DATA); " U0 ~% q2 V4 ^( |. r( g * v% M7 g' S: E! I$ a if( !SetupDiGetDeviceInterfaceDetail(info, &ifdata, ifDetail, ReqLen, NULL, NULL))7 ^ @, E1 w7 Z: h# P! X3 Y {8 D+ e% x0 n) c* z6 p/ x SetupDiDestroyDeviceInfoList(info);8 o/ y' `5 F/ N- W5 s delete ifDetail;: o6 k: T. C' d* @. t5 @ return NULL; 4 ?% H4 i- U1 w \; ?% y }

printf("Symbolic link is %s\n",ifDetail->DevicePath);& b$ O; t) D& [ i# v2 L

/*\\?\\usb#vid_03f0&pid_1016#5&1bc41f6c&0&1#{25DBCE51-6C8F-4A72-8A6D-B54C2B4FC835}这是ifDetail->DevicePath的内容*/: [" Z9 _+ ^. `" N$ O // Open file 9 G! x. h0 X H% i ^& L' H//前面都很正常但就是下面始终得出一个无效的句柄,我也就无法开展下一步的工作. 5 @) g$ V3 \4 G! x HANDLE pDevice = CreateFile($ J% y5 S. L/ _. V ifDetail->DevicePath, . H" @6 ?1 ?* x' ? GENERIC_READ | GENERIC_WRITE, 3 V0 z, e: R3 h6 O2 \0 _' E FILE_SHARE_READ | FILE_SHARE_WRITE, 8 L4 u# N( \% U. ^$ q; O9 X) ?$ X NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);3 \2 }8 ?/ M; u; C& }1 Q4 G2 V3 [ 7 r( Q9 x7 E9 x, r( V if( pDevice==INVALID_HANDLE_VALUE) pDevice = NULL; * `+ K" Q7 C& ~1 [; n5 ? SetupDiDestroyDeviceInfoList(info);5 A P p, e* e3 c; W e 6 {* r! K! _4 D- b( i5 Q return pDevice; ! r( N8 x# q, t5 E( }+ p} 2 K N- r/ v4 f再次感谢关注这个问题的人们。

+ Z# ?3 H# g% h8 g8 [ Y + `8 B; [8 ] S" N " ~4 G0 p9 v v" _+ c 回复人: constantine(飘遥的安吉儿) ( ) 信誉:101 2003-12-16 21:23:57 得分:0 0 Q* L5 }6 M, z! s3 P ; l% [$ B8 E6 B/ W - E) ]5 b/ w( Y% Y- D: l & L3 X/ @: X N2 vstudy

" f& D$ Z# X+ A1 z + @/ @# p& R- p3 D+ S+ xTop , L8 r, f' ~* w3 V4 ` 6 Q! `8 \7 E ]; p' M 回复人: wenyongjie(一个想成为大鸟的小菜鸟) ( ) 信誉:95 2003-12-16 22:28:46 得分:0 + }7 [0 e( x3 H # i7 d, e; _7 H $ G4 T1 j9 V& M1 E5 m 8 P7 H P, e, |( ]" `$ V 只有学习的份

' b5 N& r C% M( G( s L; j7 ~$ V5 C/ W Top 0 v; U/ X+ a" ?8 x. N 5 h c- Y. _1 t$ t5 v 回复人: HUANG_JH(保卫钓鱼岛) ( ) 信誉:115 2003-12-17 9:50:41 得分:10 / d% E8 a! _/ ^6 Y. o i% N' _ ; y7 [+ R V2 T3 [" c , S: R* v& _5 I+ _ R 1 G4 f; x! j6 c* [5 C 不知道有没有用!

///////////////////////////////////////////////////////////////* B! d( S" d' o! f* A5 t( E // HW9911 evaluation board software Rev. 1.0 0 |# H7 s& E5 a" v8 e// program by Liu Ding, Bei Jing HEAD Elec. # i8 r+ x3 l N8 I% h* a0 h// this is the main program for the HW9911 USB device evaluation board+ S! j2 ]+ B1 q7 A& V // it illustrate the basical read/write process of HW9911 3 O' d" V, Z3 G# @( q6 p// by three examples:5 q7 Z7 m% g7 o. A. u& Y4 w // 1. write datas to ram on the evaluation board+ R; M) b2 j0 V# y8 J* f% q // 2. read the datas from the ram on the board ( f3 Q8 _& ~% b2 n6 q; S// 3. send datas through RS-232 serial prot on the board# |5 M1 D( M; c! z // 5 U9 z X9 a% U4 b// the whole project are build with MSVC 6.0 4 q1 D% _/ q5 l. e// and tested on windows 98 platform. ( f M2 G4 i$ z. X// , ?6 e! x1 M1 `// notes: you can use hyper terminal to reaceive datas form RS232 port, u! x5 ^! l1 N0 s/ @+ ?- c //- w6 q! J2 b) @! j // this software are designed by Liu Ding% H9 D* @' S; C4 G& N2 k2 s // if you meet any problems, pls contact by email: 4 k1 {1 h; X/ V// hugehard@263.net2 H' d1 _( q1 F // or contact HEAD Co. by Tel 86-10-87312497 6 z: f4 @9 L. `$ a// or by fax: 86-10-873124952 J7 I w5 L X" n1 {1 j ///////////////////////////////////////////////////////////////

#include "hwdll.h" ( J+ D f. o0 D+ E#include "stdafx.h"9 z9 ]- ?: U9 ?# Z #include <stdio.h>7 f7 d- S8 z& l: F5 _/ x #include <windows.h> ) i8 G: z5 v2 R; u7 u" q#include <memory.h> 5 i7 W4 y8 B: _+ h! C5 D#include <DEVIOCTL.H>; @. {# e; n9 R! [) C #include <stdlib.h> " ]6 A3 @* L ^3 d2 }/ f7 z4 c#include <conio.h> R. d* ], _) V* b; j. [ #include "hw9911.h" - l* v! u( n4 ?, ~6 p" X#include "test9911.h"

2 H7 `' E# _5 A8 R& Z% P5 Q; nint main()3 G% y Y4 @: Z( |0 ? { ; n! w6 _ P5 Q( R int hOpen=FALSE;% c+ f9 m0 i1 \; v0 F- n7 C int hCommandLength=32; / f. G2 g0 ^- d) M/ h) x4 G int hDataLength=64; E1 y8 A) L' s9 X' |4 @ int i,VertAddr=0,HorAddr=0; 5 h2 m) }6 f# `( U$ j) G y int addr,TotalLen;- }+ I q- Z6 [' F( ^) Q USC StAddrH=0,StAddrL=0; . e* L% m( J9 I4 J6 G) A USC DataLenH,DataLenL;& @: }; k5 J2 k; Z6 v& A USC *hDataBuffer,*hCommandBuffer;* X: g; m6 U1 w USC ch1=0x61; % z1 C) Q8 t& g( n HANDLE hDeviceHandle;% C9 p1 p& c X! z! y) n7 v. m! f 7 n) e* x8 k% o6 I printf("************************************************\n");$ Z7 V7 f/ _& @' j printf("*******HW9911 USB DEVELOPMENT BOARD*************\n");- d6 {2 _% u' V) o$ Y4 s printf("************************************************\n\n");6 Z4 W1 b. ?, r9 b printf("now press any key to open board\n"); : B& `" Y- I( B$ i7 P' n# B; ~ getch();

/********* call hDeviceOpen in hwdll.dll to open the board***/: _' {0 C6 C. q# x3 @ //hOpenDevice 说明: : D' T) Q+ n! r& \// BOOL hOpenDevice(HANDLE *DeviceHandle) + k% \9 y- n8 X1 @6 Y$ Y// 作用:打开设备 4 a* n# {/ p8 h$ [7 f; b6 |// 参数说明:; y2 Y9 Y1 `- M+ ? // DeviceHandle:设备句柄 7 Z* O* x. B1 |4 `1 E/ x// 返回值:9 r) f3 [3 F- e // 设备打开成功返回 TRUE,失败则返回FALSE ) W& A: R$ G5 O. X% H% ?6 I if( (hOpen = hOpenDevice( &hDeviceHandle ))==FALSE)8 W% [* e9 I A8 d: n$ ^, Y& ~1 V- f5 w {3 z1 I5 v- W/ X6 r# {4 ~ printf("can't open device\n");0 U0 C$ L& p4 {9 C printf("press any key to exit\n");* {+ s0 i2 n1 }+ e" T6 X getch();. K3 I% w! P" K return 0; 7 p4 }1 Q0 g$ U- w }. V: _9 b( s+ _8 L* a, C8 y else $ ?5 ]* d- \, C+ [ printf("\nCongratulations! device opened!\n\n");

/****** build and send command **********/ 2 R h( M0 e8 Y# b4 y/ G) I printf("how many bytes do you want to access?"); 3 ]- i. }! E0 n' b7 g1 J4 V( T scanf("%x",&TotalLen); ' m# [3 A! P/ I7 { while(TotalLen > 0x7fff) ' Q% f t& x8 n" G+ P: v1 g { " P1 M& L: ?4 R# z% P3 c6 m! M printf("pls input a hex data less than 08000\n");8 J! Z2 l# A; z# u, S% i scanf("%x",&TotalLen); 4 H" o7 ?1 H" [2 ?+ r } " _9 E; L+ [" i( Y DataLenH=(USC)(TotalLen/0x100); //data length high bytes( i( X% K8 ]1 H! w$ B DataLenL=(USC)(TotalLen%0x100); //data length low bytes

printf("************************************************\n"); 3 N4 G! P! ~# G/ A/ t* u9 ? printf("now program will write datas to ram on board\n"); . }2 F( \( h. X9 D& E; B printf("total bytes of datas is %x\n",TotalLen);, w. s: d. e7 P$ y1 S# m7 b printf("press any key to continue\n\n");6 x( X" l5 ~/ n# k' ]3 z) n a8 i getch(); 1 [2 `+ N! x8 R# F l/***************************************************************** 4 R/ j, `& a9 l- @4 P& U2 m$ D now will build a write command packet 1 M" l: h3 j( q with the first byte is 'w'.3 i+ e; t, s; N# @6 f and the following bytes are:' O ]4 H4 n* r2 V start ram address byte high, start ram address byte low, * l. n+ Y% V8 c. r datalength byte high, data length byte low.! I6 S2 S. l% g# P$ t( O! i4 K this packet will send to device through WritePipe1, t/ p& A, j l which is endpoint 2 of HW9911.: P/ X0 E8 B2 _- m when the device receive this command packet,: d$ y0 f8 g5 E* l1 j' _ it will write TotalLen bytes data to Ram on the board) G* ?3 Y8 q1 q ******************************************************************/

+ } v4 b6 l1 V hCommandBuffer=(USC *)malloc(hCommandLength); E; N' n& v+ v5 Y hDataBuffer=(USC *)malloc(hDataLength); ) t, y( M$ d5 j' E" d hCommandBuffer[0] = 'w'; //read command ?* C5 j7 _: p3 Y/ }9 S0 P/ D0 t hCommandBuffer[1] = StAddrH; & r1 h0 L: P3 Q! v1 L hCommandBuffer[2] = StAddrL; . }/ f. N! P* @) }1 [0 b2 G hCommandBuffer[3] = DataLenH; 1 ~2 w4 [! ^9 c$ }* u. Q; t3 P hCommandBuffer[4] = DataLenL;

/* call hUSBIO() in hwdll.dll to send command packet to device*// x y1 K) m9 h/ d, q8 v // hUSBIO 说明: / ^+ l; j( K0 t8 S. ?* g// BOOL hOpenDevice(HANDLE *DeviceHandle,. w; q( g4 B6 Z8 v& H+ ^ // unsigned char *IOBuffer, 4 P; z7 c2 N! U( i// int BufferLength,. u4 B. S. o, \! x6 d2 h( [ // int PipeNumber, & K/ K! A9 B9 f// int Action) ) j8 h& h( l# J// 作用:设备读写 8 x! `) R8 {: e1 Z+ ?// 参数说明:: Y7 C+ j8 U1 z! c // DeviceHandle:设备句柄 9 R# X1 W+ k3 s; g# @// IOBuffer: 指向要传送的数据指针! V3 ?! w1 J8 h. O // BufferLength: 数据包长度. `6 p8 v2 H3 R& V( J // 对于发送缓存1、2和接收缓存1、2,BufferLength必须小于或等于32 8 i3 N7 u# ]; ]) a. X3 |1 w1 t) F// 对于发送缓存3和接收缓存3,BufferLength必须小于或等于64 8 M9 i: Q v6 x0 [// PipeNumber: 通道号; I. Z" o5 v) ]; a [' |* L // 发送缓存1:PipeNumber=0;/ Z; @* ?6 _2 d; m // 接收缓存1:PipeNumber=1;7 U9 X, l i5 T- l2 @ // 发送缓存3:PipeNumber=2;' Y! m( r' c$ T$ J" g, P // 接收缓存3:PipeNumber=3;# Z* u& M: m! u K8 ]3 m // Action: 读写标志。TRUE代表从设备读数据到主机 ; h P( }. Z# u7 M// FALSE代表从主机发送数据到设备 " c; r E5 z% |2 R0 j* B// 操作接收缓存,Action必须为FALSE6 N# V9 o) \: z; [ // 操作发送缓存,Action必须为TRUE , M2 R0 s$ U/ t3 H2 J' U3 a2 R' s// 返回值: 2 b1 }* J( q8 K// 操作成功返回TRUE,失败返回FALSE

if ( hUSBIO( &hDeviceHandle, 1 e# t/ ` l, X; X& W hCommandBuffer, 4 C" c0 h: d7 [; u hCommandLength, - |& g1 y! I! U( s5 p* A hWritePipe1, # X$ E Z$ h6 m) _ v0 e. t4 P: v9 f FALSE) == TRUE)1 c; C9 Q; U6 X& Y ?4 \3 B- b3 B { + H0 _: e, A) V2 h" K2 n0 q1 ~5 B% D printf("command 'w' writed to board\n"); ! k/ f0 I7 ?/ P6 m3 O% ?0 E printf("now press any key to write datas to ram\n"); 1 p; E4 F# r% P' w getch();' i F1 A: R; ~1 p Y( C7 h% t$ Z }0 O) K0 W# _' a) M8 l else 7 N3 g7 Y/ [+ w* X6 u1 H/ A printf("data can't write to device\n");

/******** write ram data to board **********/

printf(" "); / O9 O. }' w: w; }3 p for(VertAddr=0;VertAddr<=0xf;VertAddr++): x" O# m4 H, m. ^2 Z printf("%02x ",VertAddr);5 l& G, B& j- S; ?# h1 J, @" ~# Z/ @ printf("\n");6 ]7 `4 u9 e* ~' x8 E3 L! A# I addr=0;. e! G4 ]5 Y0 X" b: O while (addr<TotalLen) $ y$ o& ?& T: W- m, z1 O { 4 Y, T9 J! H6 o1 o$ t' O5 R if (addr+hDataLength > TotalLen)0 W( {0 ]5 F6 o% p; }( X6 q( b hDataLength = TotalLen-addr; ! r* }; f( b4 @5 p for(i=0;i<hDataLength;i++) W9 K# w! ?% s& s6 i! Q { ; v/ U2 ~$ t+ H4 q/ w hDataBuffer=ch1++; ( ^ D, A' U# E* I) r if (ch1 > 0x80) ! P% l0 `4 _- S+ l! n3 T ch1 = 0x61;" ~3 X. l- U9 H }: z/ K$ V+ _ x. V7 L /* call hUSBIO to write datas to write pipe3, which 8 ~, J I+ ^( I is endoint 6 of HW9911*/

if ( hUSBIO( &hDeviceHandle,# b" |7 o3 `; O. z" M; R1 R% o& Y& f hDataBuffer,( _. P0 Q. F j2 L' O% ?4 S hDataLength, " h9 M* V: k1 t& C) `: v7 D; y4 Q hWritePipe3, - Y3 [ @" K, l FALSE) == TRUE) //FALSE means Write operate- v3 k- X5 X! O9 S4 { b. d8 A1 y- _ {- N# E8 A: Q/ A9 i& N for(i=0;i<hDataLength;i++)+ N* Z; M$ l$ M v- X { & {3 F; I7 H( e/ h+ k/* print format control */ : Z0 E7 _9 a9 [1 p, v if(i % 16 == 0) 5 Y9 A3 r6 s8 i# q' Z4 l {: B" j& B' [8 Q0 K8 y printf("\n%04x ",HorAddr);: {$ p( w2 L3 m8 Z HorAddr=HorAddr+16;4 p% h- D5 d# v2 I! g! ^ }8 ^# f5 l4 c7 [9 s0 g printf("%02x ",(USC)hDataBuffer);+ w, C% y8 m! _ [6 M* j( ^7 { }, b9 E) H$ Z- O, Q8 R addr=addr+hDataLength; $ U5 W( R5 X- r( `, u } 1 n5 S w, W9 B# u5 Z% S _+ o8 H2 a else / u( f6 G R; a" j { 4 L! e, N/ e+ q: j/ R printf("can't write to board\n");+ O" y; D; r" s7 L% t" D exit(0); ( X& H% Z( H& Z2 S* x } + w7 D! `/ P" G. p. ~+ @ } + w2 H& J3 @' v0 c. F$ N, i) J printf("\n\nTotal%x bytes write to ram OK\n\n",TotalLen);

; j8 ~ _0 Z; Q# @9 F % {& k8 \' C, }6 x. s& _7 | Top ' g1 h! ^+ z {. M0 i8 J& K7 K - O+ j7 W+ _+ D; H. Y" J. Y9 s 回复人: HUANG_JH(保卫钓鱼岛) ( ) 信誉:115 2003-12-17 9:50:51 得分:0 ' D2 x. o8 i! `1 ^ 8 a7 h& u% n, m) G3 Q1 w! z ! v$ Q. B" U" f5 F R2 d) P

/*****************************************************************' e4 B3 R1 Q, u6 z. H. j now will build a read command packet ) E! n/ p3 K" ^4 ^8 h* x9 f with the first byte is 'R'.. n* t/ R; K6 X+ d# y, w and the following bytes are:$ j4 ~* T" t% l- ^9 j" D start ram address byte high, start ram address byte low,$ g8 A$ f, I% C datalength byte high, data length byte low. ( U5 n: E8 e* X3 w1 | this packet will send to device through WritePipe1, 9 U8 e0 ^) ~% r7 ` which is endpoint 2 of HW9911. 2 S4 v, [- P0 I7 _8 P9 x, T$ L when the device receive this command packet,8 C: I! q, G) s8 F0 ^2 V, ~. v it will read TotalLen bytes data from Ram on the board " a7 J* j3 c. D/ A8 c+ M******************************************************************/

printf("************************************************\n");+ \7 P+ `. ?0 Q$ V% ` printf("now program will read datas from ram on board\n");1 T- J k) G- ^$ H printf("total bytes of datas is %x\n",TotalLen); " M5 w8 u& R2 Q; c/ C- n# _ printf("press any key to continue\n\n"); * q8 { d6 j. v7 s& `: x getch(); / @ L: z# a' b# ~ hDataLength=64;1 g; _1 r$ a# y6 y: M hCommandBuffer[0] = 'r'; //read command : {/ b5 W" T* x- h" k6 [9 e# ~; V hCommandBuffer[1] = StAddrH; 4 W8 K4 U# H& i( Q1 p, ~9 M hCommandBuffer[2] = StAddrL; e3 \2 C) h8 f5 q/ K% v hCommandBuffer[3] = DataLenH; * ?) x$ U2 C9 |8 j8 ?, ] hCommandBuffer[4] = DataLenL; . j. t C' X0 K /* call hUSBIO to send packet */ 2 g6 ]. d( S4 y+ r! L if ( hUSBIO( &hDeviceHandle, - B, L9 N( U; ^9 s7 s" L% j hCommandBuffer,. D9 O- S$ g! j# a3 @1 `8 r7 | hCommandLength,2 G/ \) |. [+ Q" I hWritePipe1,) l+ R( u7 |7 M% J/ a$ F& f FALSE) == TRUE) ; p, E' @; ^! T; w8 _! \ {, i$ Q3 Z6 n _% E( j printf("command 'r' writed to board\n");" E: C$ ^6 m5 w4 R$ |# D printf("now press any key to read datas from ram\n\n");6 P3 P! Z% K$ {/ G. E' E getch(); W$ R, X8 x; I/ f/ F2 B3 _ } ! T7 X+ K2 J. ^/ H4 M- Q2 _ else 2 j! B5 [! g7 M- s8 c printf("data can't write to device\n");

/******** read ram data form board **********/ & [$ y- p: s( R6 _& } printf(" "); $ [% T0 j7 {" _3 q( _* E for(VertAddr=0;VertAddr<=0xf;VertAddr++)6 [4 t/ v- ^0 T6 j" J* @ printf("%02x ",VertAddr);& c, f) \3 x0 w- {- ~$ @ printf("\n"); : V0 g: }7 I" V' P0 V4 r- Q addr=0;# m# Z% L; x7 r9 W$ `( d3 D+ ^ HorAddr=0;$ n: A D/ c; ]2 W/ ? while (addr<TotalLen)3 E& y$ {7 M6 K { 4 ?5 \7 c" K* V: H% l% D* B$ ]8 O if (addr+hDataLength > TotalLen) ' P6 ^+ a/ J& S s hDataLength = TotalLen-addr;$ P: |: m4 p; Y" V I /* call hUSBIO to read datas from board */ 8 _' I4 T r7 q5 x if ( hUSBIO( &hDeviceHandle, 5 q: ] N- e) d7 ^4 c hDataBuffer," n1 _" N6 F% x' m( K hDataLength,6 i- [9 s5 T8 i/ w; i hReadPipe3, 4 x8 F$ }% u7 W1 `( l TRUE) == TRUE) //TRUE means Read Operate4 N7 u' X M1 {8 Z; i) M ~7 N5 G {; R& W4 V5 J( }$ l/ P# h# E for(i=0;i<hDataLength;i++) ) r/ }9 F# [& B6 j7 R {- k# b/ i$ A" _* n" u, d9 x5 J /* print format control */6 K5 Q: B& F: e. R" f if(i % 16 == 0) ! Z2 ~2 W+ B4 @" M9 m { " ?6 J$ _8 y! z4 L5 L' G printf("\n%04x ",HorAddr); - [, a, x; Y0 ]7 l5 B u HorAddr=HorAddr+16; 5 F7 O2 X9 I8 W+ Z/ b1 x }8 v) X8 [ A+ h! V& w8 U printf("%02x ",(USC)hDataBuffer); s9 A H+ P9 J5 O I" z } 9 M2 @+ K% B$ o5 b# l" E/ Y3 L6 k addr=addr+hDataLength; # s7 }" G1 l& F/ z" Q% r } 2 `# P2 E( t' v7 R1 ~6 Q else 5 R: ~7 ?! T/ q1 J" w {/ h! F Q- y5 Z# [3 c" p3 U' k; W printf("can't read from board\n"); ' S1 ^& @" @3 U l1 v X, [ exit(0); ( R/ K P5 w, Y1 k H } ! V! m8 m. ~9 T9 ^$ |& M } $ l, O( M9 S8 v7 k8 a F printf("\n\n");) Q6 e9 M9 V6 ?, _/ U5 \4 d* a printf("%x bytes read from ram OK\n\n",TotalLen);

/*****************************************************/5 C2 P5 }) r4 H7 Y* g" r8 Y+ s /* process rs232 test */ 3 `1 n/ Q) M- z* o I; Z/* the first byte in this packet is command 's' */ 3 x$ r2 ?' D' Y+ D/* and the following 2 bytes are used to set */) T k- q. a9 K+ ~) K /* the baud rate of 8051 */ 1 z( W5 \: k7 \! U; `3 i/* they will be write to TH1 and TL1 respectively*/1 K/ R# O3 x F' ^: _ /* the following bytes are datas will be */ - x8 t) Y2 g0 l. y+ n! V/* send through RS232 serial poart */ 1 p7 Q1 R E' O9 N! _/ B8 A/*****************************************************/5 ~! ?, D* Z9 @) g2 A" a E printf("\npress any key to process RS232 Test\n");2 c' t+ R) @5 x, Y# i getch();' n! B) N( j* O) @$ t7 q7 w 2 _( {9 Y0 H$ S USC TH1,TL1;+ j. t+ j" |0 C5 E( ]) n6 U char hStr[30];& F& |1 f- A. m' H/ L TH1=(USC)(BD9600/0x100);% q% T4 Q3 e& A TL1=(USC)(BD9600%0x100);2 |" h* D3 c L- i hCommandBuffer[0] = 's'; //read command9 r: ?2 Z7 K" n/ \- X0 M hCommandBuffer[1] = TH1; $ b. T: p! L% b; P% _5 W0 Q- X hCommandBuffer[2] = TL1; //start address is 0x0000

strcpy(hStr, "Hi, dear HW9911 consumers! "); , E& \7 ?& b" q8 B" Y$ O$ x printf("Hi, dear HW9911 consumers! ");( t4 ^) \; M4 w6 ~* y7 i' O memcpy(&(hCommandBuffer[3]),hStr,27);

if ( hUSBIO( &hDeviceHandle, 2 U) e! S& u4 @# u hCommandBuffer, 5 A& v$ ]5 C1 e6 ?- k6 F 30,2 }+ C5 u* D, f" @% { hWritePipe1,2 r0 C8 l3 i" E) O FALSE) == FALSE) . r. ]( T: R: @3 r) N i { ! d; x& [+ R/ k* y printf("can't write datas to RS232\n");) C3 q$ {: }8 R5 b: ]( M exit(0);7 I: N# {7 S+ b \: X$ Z }

strcpy(hStr, "I'm HW9911 Evaluation Board, "); + `5 D6 T: s8 F printf("I'm HW9911 Evaluation Board, ");! n& u, @( r, m6 \! g memcpy(&(hCommandBuffer[3]),hStr,29); $ m+ m2 W2 v3 O, l K/ I 5 y5 `) U6 s$ p- E# c if ( hUSBIO( &hDeviceHandle,* `' U1 ?' q1 M& o |2 _. k3 a hCommandBuffer, ( ?) a, E. K8 O 32, 5 P% X1 u: Q) O- a' v hWritePipe1,6 P+ ^ |9 t$ y6 D7 m! O3 W FALSE) == FALSE)& ?- ~, O" O5 u) f7 c { " U5 a! o; y) g' {, P, q printf("can't write datas to RS232\n"); $ g9 s2 J0 R8 {: V, z exit(0); 7 i/ E. `, q# Q0 d* F/ E# _% [% n }

strcpy(hStr, "thanks for purchasing me, ");) y1 I! R7 X, s/ r' L+ r" B printf("thanks for purchasing me, ");3 ~4 B+ X; X" b% l# e7 B* c1 R memcpy(&(hCommandBuffer[3]),hStr,26);; r4 i* q- e, S6 W! d3 m + S: p+ R' ]5 W; Y1 J if ( hUSBIO( &hDeviceHandle, # W3 s$ d; R! i& _7 V* Z hCommandBuffer,6 B+ ?1 S) [ ?4 @# i) N 29, * p- Y$ \+ Q9 Y* v+ X hWritePipe1," [0 J( o6 ~6 s9 O6 N4 b FALSE) == FALSE). C$ q+ E# @; W% Z0 g) H% c$ { { X3 {5 I9 r7 W* `8 O+ b( a printf("can't write datas to RS232\n");# `# f$ S, _9 r2 {. @ exit(0); - b* U, ^+ T$ V: |5 e/ r5 x } + w7 b% a0 p5 ?$ }; k ) Z2 {9 t. \, m" V8 } strcpy(hStr, "If you meet some problems, "); # M$ y& L3 m. J printf(hStr, "If you meet some problems, "); 5 x/ _% S& a: R) r1 \ memcpy(&(hCommandBuffer[3]),hStr,27); ; T `# g3 E3 @; W: h' N2 F# U ! S1 X6 Z; U% W1 `6 {# L# F; t if ( hUSBIO( &hDeviceHandle, 7 Z* h5 M! A% g4 ?* P' }) I' q! Y hCommandBuffer, 8 v% n4 E2 L2 M: M" o$ p. i% ]7 p 30, ; W; a) G0 G6 `2 C' b hWritePipe1,. B6 H+ W; @. m: @ FALSE) == FALSE) % ~3 e P- g5 ? {: v, q, G3 v% _6 a0 _% q printf("can't write datas to RS232\n"); 0 q c" B: b/ v6 _1 g! b5 E9 N' H% _ exit(0);: I/ h- c8 M1 }9 i @1 A4 c }

strcpy(hStr, "pls contact my designer ");: `: {& ]2 y5 Q- M0 C% D, C printf("pls contact my designer "); 0 J( L! Y& q+ |. A memcpy(&(hCommandBuffer[3]),hStr,24);0 F1 U' v8 `* N2 `+ X ) j# p& R7 C) I3 G K: c- i if ( hUSBIO( &hDeviceHandle, ) [4 |' P* P( H5 u hCommandBuffer,, O' t( N: t+ M. R ^6 S 27, L1 S- h9 U( e$ E1 z hWritePipe1,( I; w( j! Z9 s FALSE) == FALSE)" \/ Y& W9 u( Z9 p0 a' \ {& ~$ n( f( }! T6 Z+ Q0 g& N8 G: I printf("can't write datas to RS232\n"); 4 Z. u( k# [ V9 Z+ }- K; M+ E exit(0); . u- R" W: a- y" i% \! \7 M }

strcpy(hStr, "by email: hugehard@263.net.");6 `' d/ O9 W$ p* C3 c& d6 E printf("by email: hugehard@263.net.\n"); ) P) p! l7 i) _ memcpy(&(hCommandBuffer[3]),hStr,27);5 a6 j- Y8 n% d- t) U " @. l$ C% }, m8 O if ( hUSBIO( &hDeviceHandle, ( w/ F+ L7 a0 ?+ A( W( j hCommandBuffer, 0 \4 v; Q. S S) U! u/ Z 30,1 C# p* m: j1 Z, U t hWritePipe1, ! s4 F: f" Q$ ~( K FALSE) == FALSE)5 X3 o5 w8 M) [& F { $ O& m/ ~0 `4 ~. R- |$ \! g printf("can't write datas to RS232\n"); 2 B7 k5 w& g% M' U4 [( I+ }) l exit(0);& S A. N6 U0 \ } S7 J# Z' q9 j/ a3 C1 p+ @/********* call hDeviceOpen in hwdll.dll to open the board***/# V9 k/ q' U' v! |- O8 J // hCloseDevice 说明: ' y) |. X$ y9 W2 C; D2 }// BOOL hCloseDevice(HANDLE *DeviceHandle)$ r" Z6 Y" b6 h7 D // 作用:关闭设备% |% S# t' v1 M3 C // 参数说明:8 z6 h* u' h Q; k4 E/ x // DeviceHandle:设备句柄; W$ p. `5 B+ |3 \ // 返回值: 6 k- `0 o" a. c6 x// 设备关闭成功返回 TRUE,失败则返回FALSE9 W- w7 o& k. c/ ?4 i+ u if( (hOpen = hCloseDevice( &hDeviceHandle ))==FALSE)" R# j. ?8 |, n0 t0 c {$ _0 z, I+ e/ q$ y! }2 L8 _% | ~ printf("can't open device\n"); ( w% Y* Q B" z3 n" Q; H printf("press any key to exit\n"); ) Z) |6 _9 o6 m" {- t/ d" x. G6 z getch();) y# B2 n7 A. U; t, ^$ o$ K* I% L return 0; 7 s2 F+ W, J- k5 {* F } : {4 J7 _2 \8 w9 S/ ~ j else `0 T6 `% `: Q2 W/ t$ J* c P printf("device closed\n");

printf("press any key to exit the program\n");2 }; [' m9 F- O4 P i6 q- w+ ^ free(hDataBuffer);9 B* N# h& D7 L( P7 G# u8 E, a free(hCommandBuffer);: M- [& Y- B U+ a/ ^# v2 I# ^% l% E; [ getch(); + O) C9 L7 ^: q# }" { return 0; ; q. W7 U! E6 \4 G. G; [}

0 o) u- A6 Z6 s/ p) \ ; U2 `7 F3 A3 C" b . }4 L% K4 [, P0 e7 Z$ ^ Top / x( H5 N: \* c+ Q' q& c& g' k / O7 f+ `' V2 R 回复人: aiyu33() ( ) 信誉:100 2003-12-17 11:41:24 得分:0 : P: f3 Z0 ]2 S5 Y9 ~; d 5 g+ ?9 G, ~: |- d 5 G1 W# E, ~ S3 ]! F3 \ ) e; B: I, I% E6 b/ i3 y! r7 p, ?7 s upupupupupupup

# k: Q9 E$ `& g$ U1 v' }7 Q5 s ) b% L9 A. l; x Top 4 R7 z1 X+ S- g- }1 A 2 |, z+ L. W6 R% F( u% I$ {2 H 回复人: kingcaiyao(AKing) ( ) 信誉:110 2003-12-17 12:53:39 得分:0 : Y. M" `+ E \" d% K$ L: Q- v# x : c' M8 l; _5 n ) e! e1 t7 _* p4 d 6 E) |7 [3 @2 z: w( G5 _& w你开发的这种软件类似于Palm Desktop Software,负责Pocket与PC之间通讯,我建议你最好先写一个驱动,将USB口虚拟成一个串口,然后直接对串口操作会很方便的。我现在做的程序可能和你相似是一个CDMA模块,通过USB口与PC机连接,然后由驱动程序将它虚拟成一个串口,我的工作就是和这个虚拟的串口通讯。

* B0 ~; Q; n0 o$ P' @7 G8 j 2 [. Y' \6 K, y2 F Top 5 E! {8 ], F0 a3 O8 Q6 D 2 r" r& e& Q& v# J 回复人: kingcaiyao(AKing) ( ) 信誉:110 2003-12-17 12:56:27 得分:0 $ B+ L% o( Z% D% A; N4 X; a % k1 X9 L; _2 |/ b7 E " |! \* X( a/ R ( B+ H& e* z& n$ wPocket与PC连接肯定有驱动的,如果驱动程序没有将Pocket虚拟成一个串口,你也可以直接通过设备GUID和设备序列号进行访问,详情你参见我专栏上的一篇文章。当然了,通过虚拟串口来访问设备肯定要方便,简单些。

}2 v" J( D( j; O " p1 F C2 n; r' nTop $ t, E! X3 e% B( }+ s h$ i) t 7 q' Z% J7 X& U( w: X, w: C f 回复人: aiyu33() ( ) 信誉:100 2003-12-17 13:31:08 得分:0 z9 u! `1 G6 _0 G8 r5 v ! d. k7 ]" k* l+ X( B1 m 2 C7 P' K& v1 O! K 9 \* t0 C% [0 ~) G我得这款pocketpc默认只支持使用usb与pc相连的,而且activesync3.7就是使用usb传输数据的。如果我自己写驱动的话,不仅不熟悉而且很可能activesync3.7这个软件就使用不了。我只需要利用它的驱动。你的专栏上的那篇文章我也看了,我就是模仿你的写的代码,但就是到createfile这步就不行了,我的同事是用palm开发类似的程序,也是到这步就行不通了,是不是有其他的原因? 7 @$ Y( H& S, L$ X我还想问问如果驱动程序将pocket虚拟成串口,如何查看它的符号名呢?

8 r8 N6 ]( G4 n: V , X- d) O1 a# {4 u , E( ^: y2 D- H7 W) X S) k6 y2 F% W: X Top , w# ]: Y: Q: ]# Q , F* J) f) V f/ H- V* m( i 回复人: kingcaiyao(AKing) ( ) 信誉:110 2003-12-17 16:53:17 得分:0 7 m6 O5 w! {5 R7 D% e* S * U+ P% D/ K( A1 ` 0 m5 k% Q9 B5 W4 t# H/ ? ( w& S* @/ |# ]+ P 假如将一个USB设备虚拟成串口的话,那么它的符号名可能是COM3,COM4,或COMn,这根据你当前PC机的配置而定 。它的符号名位于注册表中HKEY_LOCAL_MACHINE\CurrentControlSet中,你可以搜索注册表,另外在2000或以上的操作系统中,你可以到HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SerialComm中看到。

4 N2 ~# A* U/ `- N m7 T b( j . v5 j4 p; ~0 ZTop ) y5 g/ ?) K- _0 R H5 w# ?1 [' ~/ | 回复人: kingcaiyao(AKing) ( ) 信誉:110 2003-12-17 16:55:33 得分:0 & \5 x$ ^) g- b ! l5 n" F( \ T 9 O$ P7 a$ X P0 h8 G9 e 9 V+ Z5 A7 O" l. s9 w7 i9 J我以前在一张贴子中详细回答了如何利用设备序列号和设备GUID来访问该设备,你可以搜索一下CSDN。你所说的CreateFile不能打通设备,你要查一下,你的符号名是否正确,包括设备序列号和设备GUID是否正确,设备GUID你可以从驱动程序的安装向导文件.inf中找到,设备序列号则需要你到注册表中去找。

/ h; D& Z" Y0 \; @; ]! _ B8 C4 g5 W : k! p, F* l' e- X* n% W6 \' [ Top " \, _ H) e: i5 G) ` ! a/ Q0 X+ H% D5 c 回复人: gyj_china(透明) ( ) 信誉:98 2003-12-17 18:15:30 得分:90 + u5 z4 \5 J* A' s; [$ e 6 ^6 K$ C: n5 `4 r3 W / i# }8 ]3 A0 x$ s 0 K) a' W' J0 p2 @6 Y" l+ w* C! q没有星星不敢发言:(

' U" i) F8 T7 i$ h 5 @+ s9 F& ^9 W0 s5 YTop % F2 h1 ~! t2 o. M/ @5 a x 3 r- @% R# M1 t5 B. r: R% t 回复人: aiyu33() ( ) 信誉:100 2003-12-19 18:27:28 得分:0 2 U6 ^( h3 u% t6 d: | & |- h5 g& Q; r: \0 B & I. l# Q3 ]& y1 r ~ 8 K4 f* {3 }0 u6 H0 k3 W- f不好意思,是因为ActiveSync3.7一直在系统服务程序中运行,占用了驱动程序,所以不能打开设备。我删除了ActiveSync3.7后就可以了。


作者: kenneth    时间: 2004-6-2 10:36

大哥太好了

; K5 C1 b5 l/ f1 q; L

正是我想要的

7 e i# h0 p9 R

謝謝你


作者: 闹市的牧羊人    时间: 2010-8-11 08:35
看不懂         
作者: arvinlai    时间: 2011-8-2 11:25
啊 啊啊 看不懂啊
作者: arvinlai    时间: 2011-8-2 11:25
啊 啊啊 看不懂啊
作者: 幽幽蓝水    时间: 2011-9-19 21:07
啦啦啦 谢谢
作者: www.qqqzq.com    时间: 2011-11-22 06:26
我是刚注册的新手 请各位大哥多关照
9 n( s  }$ C" x/ N
作者: MichaeLonger    时间: 2014-6-18 21:13
路过。。。
作者: MichaeLonger    时间: 2014-6-18 21:13
水水。。。
作者: hitshijian    时间: 2015-2-3 10:25
赞一个!!!
) j# z1 e+ s7 k" ^8 o% ~8 q
作者: SHERE201506    时间: 2015-8-26 11:00
谢谢楼主
3 S/ u, }$ H* T; v
作者: SHERE201506    时间: 2015-8-26 11:00
谢谢楼主
) _) O2 V% d: U8 q




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5