数学建模社区-数学中国

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

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

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

4 Z, T$ Y/ U/ K5 T3 c+ k

我暈,看來這回死定了

% Z6 u: |& K" @' Y2 T8 j

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

' s& A" |8 a4 w" Q+ g# n8 ]

老大救命哦

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

API之打印函数:8 J0 u' w& V" j$ h- w$ X# ` AbortDoc 取消一份文档的打印 6 U4 j8 U- ]# E5 ?2 d4 S AbortPrinter 删除与一台打印机关联在一起的缓冲文件 8 D8 f. R+ N# Y( YAddForm 为打印机的表单列表添加一个新表单 \- c( s9 h9 v0 \2 s$ ^) p8 wAddJob 用于获取一个有效的路径名,以便用它为作业创建一个后台打印文件。它也会为作业分配一个作业编号 " K: [+ G3 y$ t/ r0 }7 ? @$ [ AddMonitor 为系统添加一个打印机监视器 , z7 `- g* @/ w' _% ` AddPort 启动“添加端口”对话框,允许用户在系统可用端口列表中加入一个新端口 / `8 @4 H! v5 T8 E% f; U X# o AddPrinter 在系统中添加一台新打印机 # A" F9 w. G; a$ U. D9 x+ [ AddPrinterConnection 连接指定的打印机 - s, U" o: K" |) O, lAddPrinterDriver 为指定的系统添加一个打印驱动程序 5 q- t9 l) C' [- {$ {# e" F AddPrintProcessor 为指定的系统添加一个打印处理器 ' _$ D; x. W4 Q- c; e AddPrintProvidor 为系统添加一个打印供应商 9 l/ Q J8 l3 Q# UAdvancedDocumentProperties 启动打印机文档设置对话框 " I& I2 r# J( [ ClosePrinter 关闭一个打开的打印机对象 8 Y0 w3 c o n" v9 {& W ConfigurePort 针对指定的端口,启动一个端口配置对话框 O) T, Z* E: X, T+ n) ?6 S7 |ConnectToPrinterDlg 启动连接打印机对话框,用它同访问网络的打印机连接 0 Z9 T' q. A/ [+ Y2 YDeleteForm 从打印机可用表单列表中删除一个表单 , t/ i4 v' I) b' V, |DeleteMonitor 删除指定的打印监视器 5 I/ }7 \ ^& u( e7 u6 Q3 iDeletePort 启动“删除端口”对话框,允许用户从当前系统删除一个端口 2 D/ t4 j6 C5 H/ I" Q8 f DeletePrinter 将指定的打印机标志为从系统中删除 " d8 a; ~, s' k: E, x6 k t( c0 m7 bDeletePrinterConnection 删除与指定打印机的连接 6 b6 P2 A6 }: vDeletePrinterDriver 从系统删除一个打印机驱动程序 * [, S; C6 o4 k3 a1 ]! c+ k DeletePrintProcessor 从指定系统删除一个打印处理器 F9 _. z4 B' f8 ?& c- o5 F/ jDeletePrintProvidor 从系统中删除一个打印供应商 - M% ^0 m, y$ e% p1 `" Q. f8 b; pDeviceCapabilities 利用这个函数可获得与一个设备的能力有关的信息 + [; t5 x8 D# T3 S+ UDocumentProperties 打印机配置控制函数 ) s+ y: u1 s' a0 A EndDocAPI 结束一个成功的打印作业 % @8 F/ o5 k- JEndDocPrinter 在后台打印程序的级别指定一个文档的结束 : N, R' w: ~- k& v" Z5 f4 Z0 LEndPage 用这个函数完成一个页面的打印,并准备设备场景,以便打印下一个页 - y1 l. s# R/ q) jEndPagePrinter 指定一个页在打印作业中的结尾 $ M" E7 u( A9 t7 x, {7 o1 bEnumForms 枚举一台打印机可用的表单 8 v/ N8 y6 \1 k# r* m9 _' dEnumJobs 枚举打印队列中的作业 * l1 s' L% j; K- |9 CEnumMonitors 枚举可用的打印监视器 . ^! V) Q. V: X: T, P) sEnumPorts 枚举一个系统可用的端口 6 b1 U( K( B" P+ ~2 KEnumPrinterDrivers 枚举指定系统中已安装的打印机驱动程序 & a( ~/ o3 N6 |EnumPrinters 枚举系统中安装的打印机 c' ]0 j: j3 q% J& J2 s, n EnumPrintProcessorDatatypes 枚举由一个打印处理器支持的数据类型 6 b5 ^' V. g0 B9 Y6 n1 D3 DEnumPrintProcessors 枚举系统中可用的打印处理器 [6 v) \; I1 ^+ E( l. h4 G1 kEscape 设备控制函数 & m3 k1 S3 n# X- E. A FindClosePrinterChangeNotification 关闭用FindFirstPrinterChangeNotification函数获取的一个打印机通告对象 0 B/ x8 i$ p2 s/ O5 p; O q+ E4 e FindFirstPrinterChangeNotification 创建一个新的改变通告对象,以便我们注意打印机状态的各种变化 ; L( H$ r; q$ t* F( c, K9 M FindNextPrinterChangeNotification 用这个函数判断触发一次打印机改变通告信号的原因 % K9 I! r% S% J. @FreePrinterNotifyInfo 释放由FindNextPrinterChangeNotification函数分配的一个缓冲区 9 W) T3 b/ ~0 H# }& ? GetForm 取得与指定表单有关的信息 ; K7 @4 N0 m. k* X3 D% z! l' E GetJob 获取与指定作业有关的信息 $ s* {5 _5 {' \' W& t. m* j8 T/ z* iGetPrinter 取得与指定打印机有关的信息 8 z$ ]1 ]$ k( K! u GetPrinterData 为打印机设置注册表配置信息 3 y7 N+ K; y) |, `# c: H1 i, I8 { GetPrinterDriver 针对指定的打印机,获取与打印机驱动程序有关的信息 * ^3 D7 N7 }9 ^: V& \ GetPrinterDriverDirectory 判断指定系统中包含了打印机驱动程序的目录是什么 2 L" o% x# Z4 {0 H" n! iGetPrintProcessorDirectory 判断指定系统中包含了打印机处理器驱动程序及文件的目录 / s. `- _( N; D( s" h OpenPrinter 打开指定的打印机,并获取打印机的句柄 9 F5 W, n; y: wPrinterMessageBox 在拥有指定打印作业的系统上显示一个打印机出错消息框 + s" N9 J+ B5 rPrinterProperties 启动打印机属性对话框,以便对打印机进行配置 7 R; [! H( G: q ReadPrinter 从打印机读入数据 . P+ A! z* D0 p- d/ t: {9 g ResetDC 重设一个设备场景 " r+ B/ S8 }) p ResetPrinter 改变指定打印机的默认数据类型及文档设置 . ?; X# y9 n/ B4 s. Q5 q1 Z; pScheduleJob 提交一个要打印的作业 ( b$ l" [( n! l0 p3 j3 l$ h* Q: X) bSetAbortProc 为Windows指定取消函数的地址 8 d* |& U! p1 g& ~/ B' v SetForm 为指定的表单设置信息 3 \. s# Y9 Q# q5 HSetJob 对一个打印作业的状态进行控制 / R8 D) t" R6 w FSetPrinter 对一台打印机的状态进行控制 8 ]2 o% y" q3 I- |2 I, WSetPrinterData 设置打印机的注册表配置信息 3 x0 b8 Z( A+ J* C! v, B k. FStartDoc 开始一个打印作业 # @+ J ]3 V2 t! m2 T7 zStartDocPrinter 在后台打印的级别启动一个新文档 1 j$ O3 x0 N$ K, _# _8 `) IStartPage 打印一个新页前要先调用这个函数 3 c' C( \% G3 A4 c8 e+ k StartPagePrinter 在打印作业中指定一个新页的开始 4 Q1 F; N3 M0 k3 q2 j9 ?* E. X WritePrinter 将发送目录中的数据写入打印机 " @ a; q {5 L


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

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

主  题: 关于usb通讯方面的问题。请AKing大哥及相关高手来看看,万分感激!!! ' m5 k- o+ A$ s: u2 }作  者: aiyu33 () 2 E0 z. C8 ~2 ~1 l. `: y: H8 A3 J 等  级: " t; x; x. {7 M& k$ t% A 信 誉 值: 100 ( n2 y: J( e2 y) ?2 X 所属论坛: C++ Builder Windows SDK/API : Q8 d8 Y# I" i/ T- ~ o 问题点数: 100 9 w4 j' H/ m8 j$ c回复次数: 12 / J" X4 }, C. B5 D5 [4 N发表时间: 2003-12-16 20:43:13 6 i' K: T; Y. w7 t: E. Q) ?+ x [ 5 r$ _; `: O( @' }- O ]. B & ?9 M/ Y: V6 u, z

最今我接到了开发pc和pocket pc通过usb口通讯的任务。这两个星期我参考了很多方面的资料,特别是AKing大哥写的一些文章。但我始终没有打通这个关口,我贴出我的代码请AKing大哥看看,现在很急,多谢。* ~1 c; F& K- ?: C% v' _2 b pc的os是windows2000professional! D1 b) ~5 }/ N) h3 H+ A/ h pocket pc是hp ipaq 2210,os 是pocket pc2003。) b$ a$ W3 A2 c! J- W2 O 我装了activesync3.7。我查看过了,这个activesync目录下有pocket pc的驱动程序。pc也能识别。 5 }* g k% y+ I; y4 V下面是我在pc上调用usb的代码。! r1 B. ?0 }- Z ?& K8 Q/ n 下面的代码我能打开hidn类型的usb,但是就是不能打开pocket pc的usb。 % [4 u0 k/ s- l' N7 C9 L" `8 y//classGuid = {25dbce51-6c8f-4a72-8a6d-b54c2b4fc835} " _; |: z E2 Y6 [3 C) f% v9 b) nDEFINE_GUID(GUID_CLASS_PALM, 3 A6 P3 z6 \# B0 ?/ P4 e; d 0x25dbce51, 0x6c8f, 0x4a72, 0x8a, 0x6d, 0xb5, 0x4c, 0x2b, / r4 f# X' a2 j6 o% o 0x4f, 0xc8, 0x35); , u; ~9 O! l$ w9 G5 ], Z+ dGUID HidGuid = GUID_CLASS_PALM;% [ I1 w" h; y& N HANDLE Get_DeviceHandle( GUID* pGuid) 9 d& g0 y( q6 h/ W6 n& |) p; }{, | W- I# e' u4 b8 C - ?6 k% h8 `! Q4 B HDEVINFO info = SetupDiGetClassDevs(pGuid, NULL, NULL, DIGCF_PRESENT | DIGCF_INTERFACEDEVICE); 6 ?" e" B& E" b3 s7 l& b! E) b - c! |9 [* X+ o# t if(info==INVALID_HANDLE_VALUE)+ Z2 t* R+ a8 B$ F {4 [ R {3 q( l printf("No HDEVINFO available for this GUID\n"); 7 b; U x& o5 Q' }9 G1 I return NULL; 0 }1 @; a7 R# m: M# g* I, M }, e; b' ^5 R% o SP_INTERFACE_DEVICE_DATA ifdata;1 r% w$ r, ~* o( `0 l ifdata.cbSize = sizeof(ifdata); , w* E, V8 U. D$ A9 c: E# n2 {. ~7 D//0000是我在注册表中找到的序号 9 M1 E; x7 Z0 H+ J d, R if(!SetupDiEnumDeviceInterfaces(info, NULL, pGuid, 0000, &ifdata))2 b @3 E2 c! R% j! ^) c- u {* ?! R' A8 J T printf("No SP_INTERFACE_DEVICE_DATA available for this GUID instance %d \n", instance+1); 9 ]1 L' y4 g; B1 n9 g2 X SetupDiDestroyDeviceInfoList(info); ' N: T( P. _8 P4 |& u return NULL; ; w6 l1 Z/ }% U$ c }

// Get size of symbolic link name : w4 D7 L8 ?+ a- y DWORD ReqLen;) x- {1 B7 N& T# e& y, [ 9 O$ Q0 A1 |* X& F2 x2 N SetupDiGetDeviceInterfaceDetail(info, &ifdata, NULL, 0, &ReqLen, NULL);; \* f! T, d7 R) K1 i ! K1 E" C; E* k1 l PSP_INTERFACE_DEVICE_DETAIL_DATA ifDetail = (PSP_INTERFACE_DEVICE_DETAIL_DATA)(new char[ReqLen]); . [. Z4 Q! q: L8 w $ ]* H% r) O/ L9 H if( ifDetail==NULL) - `: o ]% m- G v( y% A# [4 m {. h+ T& [2 B+ Q% H. S$ t( e SetupDiDestroyDeviceInfoList(info);$ c- V1 t) u0 w, H' A% @0 [$ P- U return NULL;. V! {8 E9 f5 h& I }

// Get symbolic link name . H7 B% ?) o) @+ m7 q ifDetail->cbSize = sizeof(SP_INTERFACE_DEVICE_DETAIL_DATA);8 R+ `; i4 ~ Y7 u0 _ ) O6 ^" A) R) D! D7 B8 i if( !SetupDiGetDeviceInterfaceDetail(info, &ifdata, ifDetail, ReqLen, NULL, NULL)) s, i1 E8 e5 |) D! t# }* v { w3 t+ b: d y8 g9 n SetupDiDestroyDeviceInfoList(info); 5 D" Y/ E8 _) c5 }9 o9 H( x3 ?' k, N delete ifDetail; 2 j2 I4 i6 T& @. D& b& v return NULL; & k/ M6 ^* M+ ^. z( x }

printf("Symbolic link is %s\n",ifDetail->DevicePath); T- x) |) Q; h' k, L

/*\\?\\usb#vid_03f0&pid_1016#5&1bc41f6c&0&1#{25DBCE51-6C8F-4A72-8A6D-B54C2B4FC835}这是ifDetail->DevicePath的内容*/ # Y& `! i" s7 |" o8 A, r. _7 O5 G // Open file # }" T4 |1 W9 D4 U# m6 w. R//前面都很正常但就是下面始终得出一个无效的句柄,我也就无法开展下一步的工作." y) _! x8 m+ f. T HANDLE pDevice = CreateFile(7 l7 U2 F* D; v ifDetail->DevicePath, : [. Y* E! b/ W8 [& [7 L" p4 e* `/ W GENERIC_READ | GENERIC_WRITE,6 |; k* @- R7 q: I FILE_SHARE_READ | FILE_SHARE_WRITE, ( f; f. E+ [# G3 \% Z* e0 T NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); 3 |8 h; C' D" C9 B" c. l+ x" h 1 h5 o9 H- p1 k& g if( pDevice==INVALID_HANDLE_VALUE) pDevice = NULL; % n8 D; I) ]7 P8 K* I) x# n& G SetupDiDestroyDeviceInfoList(info); " h; R" m5 r& Q4 \8 R 7 G% {1 g& \$ Y8 a return pDevice;7 V. r8 z2 z. ^ {& Y- n c }: v! H* X: W) ^' Z 再次感谢关注这个问题的人们。

2 L ?; ^4 p0 Q% C( d; Q & n+ J0 r7 h) t( X; z6 y $ _- y4 l4 D+ f+ W! o/ x 回复人: constantine(飘遥的安吉儿) ( ) 信誉:101 2003-12-16 21:23:57 得分:0 ( ?( b$ |% M8 Q. i0 y / T% U1 R8 f( w7 f k- d ) ^2 Y6 _2 m) l% ^' g) ?! M Z+ f$ J/ c6 b5 v( R study

( s# u; Z) r Y+ V) O2 a8 C 3 m F0 I# x5 K: b% [Top * B m5 w0 b4 U - E/ F, H! |5 i: ~& }5 R 回复人: wenyongjie(一个想成为大鸟的小菜鸟) ( ) 信誉:95 2003-12-16 22:28:46 得分:0 : [% V* C9 j8 x / |9 o! a: X9 Z# {5 i( W 1 g- K) p3 ]9 N3 H- E. { / E, ^5 V& s) Z7 G/ ^只有学习的份

) S, a" {; V- R$ j, m; p 3 K! b# {: o3 c$ f; N8 UTop ! Q8 Y9 B/ e# U8 S' Z : B) @6 |5 _) B: B$ s7 g* f! b 回复人: HUANG_JH(保卫钓鱼岛) ( ) 信誉:115 2003-12-17 9:50:41 得分:10 3 x; F8 I" r5 M$ l$ n3 P $ t3 d# q# B1 T: J1 D9 ? + u8 S3 B, G1 J3 p 9 i* _1 A4 B. ^: s不知道有没有用!

/////////////////////////////////////////////////////////////// 5 M. n n+ u" u8 I5 H// HW9911 evaluation board software Rev. 1.0 + b9 o; g& T; T0 r" h// program by Liu Ding, Bei Jing HEAD Elec.% E$ }7 w# x3 n% I // this is the main program for the HW9911 USB device evaluation board " d* p, \. Y% t# ^: F+ h# O7 w// it illustrate the basical read/write process of HW9911 K2 n d1 S; E1 a // by three examples: 9 j0 Q4 F1 c) o6 ^- a) Z// 1. write datas to ram on the evaluation board! |# E8 e/ \9 D1 E8 y& a2 y // 2. read the datas from the ram on the board8 ^$ B/ ^& f3 B: u& n7 X. ]$ V4 A // 3. send datas through RS-232 serial prot on the board 8 G6 k4 z9 Y0 A: r6 r// 1 b. Y- n" W. ? ~2 Q0 N// the whole project are build with MSVC 6.0 ! X6 |+ A) t' K) _// and tested on windows 98 platform.& {2 Z; J9 C& o+ e1 V; J //8 @# ^% K+ O N8 j1 U // notes: you can use hyper terminal to reaceive datas form RS232 port0 H. L7 j/ }' y g: J M7 H //- _' r: _. K" |* V( Z3 B // this software are designed by Liu Ding 9 V1 u- d7 G- ^# p// if you meet any problems, pls contact by email:/ H6 d5 a9 o9 A1 { // hugehard@263.net- T5 j8 I- r( Q( N // or contact HEAD Co. by Tel 86-10-87312497! [' u" Y$ N" T+ F$ P // or by fax: 86-10-87312495- Y ]7 x' O6 k ///////////////////////////////////////////////////////////////

#include "hwdll.h"! B8 N( d, d8 o' i: l #include "stdafx.h". l& _# y: K0 q: d( ^! O #include <stdio.h> . l" \) v& N3 ~. V, y, V) f#include <windows.h> 6 T0 A0 h8 q6 h: F#include <memory.h> 7 e: P; D+ z* v/ Z0 t6 V7 a#include <DEVIOCTL.H> 2 a* h' u I. \1 Y- e; s# O# E% Q#include <stdlib.h>' ]) E J O+ u1 {" ?6 K* p. b* n4 O. x #include <conio.h> ! D. E9 C8 U0 F#include "hw9911.h" U8 H$ ^5 O1 ]) M; a#include "test9911.h"

4 q5 }. x- m k% S' p6 S/ n# n! Cint main()* w. p' c, j4 T { " {2 s4 z( ?: T: n5 R6 @0 P2 ^ int hOpen=FALSE; # z& k+ {/ e7 C int hCommandLength=32;0 j. o3 @: @+ h9 B! e( O int hDataLength=64;+ {* k: V) y# {/ t9 c int i,VertAddr=0,HorAddr=0; 7 e! e& n! Y! F& Q int addr,TotalLen; ( k4 z7 M+ ]! |" W USC StAddrH=0,StAddrL=0; 1 S Y8 f1 Y% v3 j USC DataLenH,DataLenL;) L [3 i2 W, M& k USC *hDataBuffer,*hCommandBuffer;( g7 h- z7 y: ?0 ] USC ch1=0x61; 0 N5 U% a# E. K5 p( J HANDLE hDeviceHandle;* k8 Y$ D5 s8 v, G" t0 E. a 0 ~$ v( P. i' v8 i printf("************************************************\n");' i: x, k0 Y0 C; z- e printf("*******HW9911 USB DEVELOPMENT BOARD*************\n"); : C- C- y: o3 H( Z3 R d printf("************************************************\n\n");+ [+ W. `2 j' A! ^& l printf("now press any key to open board\n");% u/ q& l" _. K4 W; e+ r8 ? getch();

/********* call hDeviceOpen in hwdll.dll to open the board***/ # [( T2 b7 i% b, C8 v8 |: Q$ e//hOpenDevice 说明: 9 Z# k A8 l( T/ T3 r) q// BOOL hOpenDevice(HANDLE *DeviceHandle)9 M$ T2 ?6 n0 J! M2 q0 l // 作用:打开设备8 Z' n \4 S5 Z2 |0 t% E% Z // 参数说明:/ f* m+ R( }7 [# h: r0 o9 E- y // DeviceHandle:设备句柄 $ X; s/ g4 I4 Z) X( T// 返回值:; P6 ]/ S C: D5 I // 设备打开成功返回 TRUE,失败则返回FALSE5 T Z0 w8 i+ Z$ {+ j if( (hOpen = hOpenDevice( &hDeviceHandle ))==FALSE)# D7 y0 w# M/ y4 W3 l9 X6 j { , [1 ?6 I& g1 p+ @$ } printf("can't open device\n"); # x; i6 |& M" ?- H# m, M% u printf("press any key to exit\n");; ?3 |4 X: ^' \+ @" X2 v9 \. q M getch(); . e* {& F7 ], z% Y return 0; ) A: A, q' o, C, N3 y' x } 8 V' y$ v: J% }# s3 c else 0 p* E/ s0 k, Q }: C printf("\nCongratulations! device opened!\n\n");

/****** build and send command **********/ 4 J, {! g' k: {, z) c) k5 M/ i! e5 z printf("how many bytes do you want to access?");" N2 r! j Q( C$ c" H9 U+ e' F scanf("%x",&TotalLen);; M1 s( ] C3 c4 {, I! p2 l while(TotalLen > 0x7fff) ) N9 a8 a, U( i0 ]$ h# |7 B, h9 x { - ?& }' w8 K( D3 A. B printf("pls input a hex data less than 08000\n");! K) f+ i; L6 c scanf("%x",&TotalLen);3 ^7 l; J+ T2 s- P }! Q% r6 j7 i, O) L5 l DataLenH=(USC)(TotalLen/0x100); //data length high bytes . v0 H3 Q1 t- P5 V* A* j DataLenL=(USC)(TotalLen%0x100); //data length low bytes

printf("************************************************\n"); 3 z- E; ~9 _ y4 K$ Q printf("now program will write datas to ram on board\n");. f3 w' _& F8 S3 }5 j4 a9 e( } printf("total bytes of datas is %x\n",TotalLen); ; M5 _0 L4 @' }7 B printf("press any key to continue\n\n");/ l: f, U$ M* @2 p7 G getch(); % F$ P0 n0 @' v0 j; W) @* C& h/ }/*****************************************************************9 C$ z7 n8 x# X& i }" V: i now will build a write command packet 4 _9 W: S# x0 L/ N4 o# P3 V with the first byte is 'w'.) y2 X* d: i. f7 a: m' k2 f2 h and the following bytes are:; L Q' m- W. J$ E) n( ? start ram address byte high, start ram address byte low, ( @2 i4 t5 m1 E datalength byte high, data length byte low.2 B8 X1 a3 z/ y: G this packet will send to device through WritePipe1,9 h! U! t, n8 T7 P7 b which is endpoint 2 of HW9911.# ~" k8 U8 p( e0 c when the device receive this command packet,* y5 {8 g" w1 r# k* q6 ?; _ it will write TotalLen bytes data to Ram on the board 9 _+ X8 f. S( b$ X5 J******************************************************************/

$ ^; f. b6 U1 }9 T* H/ t A4 R- v hCommandBuffer=(USC *)malloc(hCommandLength); * e9 x; y+ N. [- P. H+ v hDataBuffer=(USC *)malloc(hDataLength);) o4 {5 V# M+ E* G% }- W hCommandBuffer[0] = 'w'; //read command( Z9 c- c/ ?! @* k+ g hCommandBuffer[1] = StAddrH; . N) d( ?+ j- \" s hCommandBuffer[2] = StAddrL; 1 Q) J$ M6 L( l8 Y% l8 Q hCommandBuffer[3] = DataLenH;& |& Z2 L# E! q1 X: X G hCommandBuffer[4] = DataLenL;

/* call hUSBIO() in hwdll.dll to send command packet to device*/9 u8 Q2 k h, w8 O/ E% Q // hUSBIO 说明:: R' [3 Q; d: c: y* V/ ` // BOOL hOpenDevice(HANDLE *DeviceHandle,+ t, j( V$ v5 O' g // unsigned char *IOBuffer,% H* c1 @; @2 l/ Q8 u // int BufferLength, . v" r+ |/ Z# V' V) ?/ M// int PipeNumber,8 K. ~* {. P: h: f // int Action) w1 V) T- i' q; o/ N' I// 作用:设备读写. b( ]# H0 \$ ]9 W4 ~7 } // 参数说明: ; s6 L6 c( Q) V// DeviceHandle:设备句柄; G$ r, Y1 Y# c6 b$ v // IOBuffer: 指向要传送的数据指针 " s% j7 C# g( E" O N// BufferLength: 数据包长度, c F4 c; o: O- A; B5 U // 对于发送缓存1、2和接收缓存1、2,BufferLength必须小于或等于32 & i) e9 V) t4 A" g# I// 对于发送缓存3和接收缓存3,BufferLength必须小于或等于64, V6 s& ~) n" y# y' w% s/ H // PipeNumber: 通道号: b% Q: }9 V" I // 发送缓存1:PipeNumber=0; . @6 s: X Q A( J// 接收缓存1:PipeNumber=1; f: {! _# [7 S7 b4 Q7 y// 发送缓存3:PipeNumber=2; - C' k( Q: J3 d O! A0 a// 接收缓存3:PipeNumber=3;, H) W( a- u2 R // Action: 读写标志。TRUE代表从设备读数据到主机 0 \+ D% T8 I H* Q0 X// FALSE代表从主机发送数据到设备 8 J: \' Y+ K2 k5 f+ j& t( Q+ p // 操作接收缓存,Action必须为FALSE ) F# c3 Y0 |5 t6 f, s; V/ J// 操作发送缓存,Action必须为TRUE0 K6 J& t% @0 ? // 返回值:( }4 D. V* T5 {2 M5 A+ K+ s% g // 操作成功返回TRUE,失败返回FALSE

if ( hUSBIO( &hDeviceHandle, # l$ j- R. i3 v# i' O$ h2 u7 ` hCommandBuffer,6 g2 l& h i4 r& | hCommandLength, # A/ F! q v4 L! J* O; H S4 K hWritePipe1,0 i& M* ]; J; S FALSE) == TRUE)' {0 s$ k! W2 ?9 ]$ {5 n { ) f" z5 p1 x9 ]' C* m printf("command 'w' writed to board\n");; V6 j" Z) n. Y printf("now press any key to write datas to ram\n");% {9 D- ^0 l$ F) s6 N% Y' x0 u getch();: R; ^. p8 M2 ^: J2 v4 z }. h4 p$ W# F" |; y A+ x! L else: j. z3 z" j: v7 K printf("data can't write to device\n");

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

printf(" ");7 o4 C ~2 a" v3 J3 P% @ for(VertAddr=0;VertAddr<=0xf;VertAddr++)# Q0 t5 j8 {. Y ~. L! u( ` printf("%02x ",VertAddr); $ B6 x" ], O. n( m( f1 W3 Q printf("\n"); 8 E* F. f9 N: p2 X addr=0;5 T! \! s# ^4 @7 Y! z; _ F while (addr<TotalLen) 4 L% h8 H4 L% f% N { 2 U$ S G/ u4 \! H1 r- E- S if (addr+hDataLength > TotalLen) 9 D* Y' r; Z! {+ U* T1 b5 U hDataLength = TotalLen-addr;/ i# w6 a7 m3 H/ [; q' Q; N5 y5 L for(i=0;i<hDataLength;i++)/ L+ s6 G2 n6 c9 @7 l { u9 I8 C, F5 W8 Y! n% n hDataBuffer=ch1++; 3 I" A1 i X' t$ \+ f if (ch1 > 0x80) ( |& W8 ?- `7 q( I g ch1 = 0x61;, R. V* D3 y! q) ^7 u2 U. W$ F } * O! k" w6 t; V2 s9 d/* call hUSBIO to write datas to write pipe3, which6 a _& `2 C; u+ c% j% N+ J8 ^/ W3 j' e is endoint 6 of HW9911*/

if ( hUSBIO( &hDeviceHandle, , m6 a0 J' N4 l+ F hDataBuffer, O$ _1 ~/ R4 w; }8 C hDataLength, 1 X2 \3 `$ m) ]5 u- z hWritePipe3, ! V6 Q8 N; s3 s8 X. K5 x FALSE) == TRUE) //FALSE means Write operate % O/ Y( W5 s" K6 v. m {" X: r: o% B, u for(i=0;i<hDataLength;i++)% N6 g: \* f7 ^" y7 l- n$ o { 9 s; I9 B) y1 Q1 O$ a1 L$ y/* print format control */ M: } E4 ?' ~# C& ? if(i % 16 == 0) / `$ o' B5 _+ D; B {% V/ E3 T+ M4 l. R" w2 N& C; y printf("\n%04x ",HorAddr);7 H$ S/ H0 Y7 K/ U- Q HorAddr=HorAddr+16; 5 {- H- f x' {" l% @+ W; a1 P } 9 s/ X1 n( o% s3 T9 I# [3 O printf("%02x ",(USC)hDataBuffer); 4 W* h2 ]- W; `4 \ } # b. _% P: M1 G: i5 S8 J7 {, i addr=addr+hDataLength; , C; O3 }) A7 w" z5 q& l1 q8 C } 8 `2 L8 J. P- s8 h2 G9 f+ Y else7 C7 [5 d; D* z5 E# z1 S3 m {' C( f8 w. t9 y8 o; ?0 C) K printf("can't write to board\n");0 B2 ^9 |: c5 h% y& ? exit(0); 8 [5 O7 A- t0 x3 h. ~/ O } 8 K& d B% _5 _9 Q- Q } ( Q* \0 C; a* Y4 s S/ ~/ F$ c printf("\n\nTotal%x bytes write to ram OK\n\n",TotalLen);

4 a/ I- c/ N) T4 W! D ! x$ U; R. l& N& p, d) C% VTop : M i9 ?9 K. x7 w; ? 2 A& Z2 R. V& o% E2 v _4 l$ J 回复人: HUANG_JH(保卫钓鱼岛) ( ) 信誉:115 2003-12-17 9:50:51 得分:0 : C1 f- q2 H5 r3 f4 M . ]3 E4 T. x" s. v- b8 }9 [ # {6 E0 X" u4 C9 R& K% f/ }

/***************************************************************** # R/ q; x" _+ Q6 Y- j now will build a read command packet : s( C# ~ S: m/ B3 ? with the first byte is 'R'. 7 Q: }0 _5 @! S8 D" W# I and the following bytes are: 6 j* g) M& \/ S start ram address byte high, start ram address byte low, 9 P! U8 o- [0 @& M( U datalength byte high, data length byte low. ) a1 b( G9 ?/ w' o d this packet will send to device through WritePipe1, ( M( C% s: S* c4 U* a7 j7 L! ^ which is endpoint 2 of HW9911.- l$ E R6 y; a/ j when the device receive this command packet, 3 V: b7 S$ h) M it will read TotalLen bytes data from Ram on the board! s7 j& `: n* { ******************************************************************/

printf("************************************************\n"); + y# Z2 C3 W2 R6 l% [ printf("now program will read datas from ram on board\n");* i& p! c T5 ^' ?# n printf("total bytes of datas is %x\n",TotalLen); $ s }+ g; B% C# G0 D printf("press any key to continue\n\n");4 ^1 m' O) n- K! K2 f/ P getch();, Y! I5 `9 u6 K7 @ hDataLength=64;( j A0 u4 }2 ?& p, |/ Z7 l2 `) O hCommandBuffer[0] = 'r'; //read command 2 C1 A* [" j" w7 D2 L hCommandBuffer[1] = StAddrH; # V6 G# T% ~3 V6 p1 W hCommandBuffer[2] = StAddrL; 3 L4 H( H6 ?$ Q. K# }# | hCommandBuffer[3] = DataLenH; ! K4 Z" g6 F( Y hCommandBuffer[4] = DataLenL; 8 w! S( q' @3 c+ x' d# ?- U /* call hUSBIO to send packet */2 C5 `' C& T6 h, } if ( hUSBIO( &hDeviceHandle, % a3 w: q' E% N hCommandBuffer, ( ~' r: J0 H) B& B% [+ ]! { hCommandLength, $ a2 G& ]$ y! `/ K$ U9 ?- `5 [ hWritePipe1, . h' d( u. \3 z$ ]7 _# L FALSE) == TRUE)0 Z" j2 H1 E7 w5 L { % C. f: U! b& ?6 m9 J printf("command 'r' writed to board\n");7 M0 Y9 X8 X: d6 s- }+ i8 G printf("now press any key to read datas from ram\n\n"); 0 m4 E2 o1 x2 M4 p2 m$ } getch(); % q: I4 U& L; W- @5 Z } / d, W6 d7 j3 T/ X else$ \0 ?; A; c) V. N0 j printf("data can't write to device\n");

/******** read ram data form board **********/" H% ] c: t) G2 @. F0 d printf(" "); - Z) c1 }4 d; |$ `2 ?! N for(VertAddr=0;VertAddr<=0xf;VertAddr++)- }% p/ w% u! o! o% F printf("%02x ",VertAddr); , S3 D* t1 l Y" v( R; P Z printf("\n");! v/ o! T+ B# u* W# n' s* u. ] addr=0;7 t( ^( Y% v9 P. k HorAddr=0; & C+ l: ^* Z. D# s" w4 M' k while (addr<TotalLen) + B- X% a9 H1 S5 D4 S/ z { 0 T. ~1 Y* I' e* ~2 s if (addr+hDataLength > TotalLen) 7 m( }# o" b' z- {8 a4 k& ` hDataLength = TotalLen-addr;$ @. M- e# d/ N; i /* call hUSBIO to read datas from board */9 ? t S P5 L' d if ( hUSBIO( &hDeviceHandle,, d; X! u% f8 o- c' `- w hDataBuffer, 3 _& s: _0 J& ^5 i9 m; z$ ]! ? hDataLength,- a: {8 P' B7 x# e% c hReadPipe3, : g. P0 C' o) [8 a8 W3 G3 V* P TRUE) == TRUE) //TRUE means Read Operate7 j. M0 E0 X0 f1 R3 W# s { ( `7 ]. f3 }3 q+ l( W" L) V for(i=0;i<hDataLength;i++) # K4 U, a: `! E6 S: @/ p. D: g+ R! N { 1 q' v: g3 i: a" Y/* print format control */, ^: c: v% H; k R4 C if(i % 16 == 0) 1 s2 `7 j k4 O! S( U1 B {* w' u, O( z& w: X8 U+ u! u printf("\n%04x ",HorAddr);/ p6 [: s5 N5 K0 H: k% h HorAddr=HorAddr+16; : Q* ?% \. ?7 S9 a& W: l }6 G0 Y0 c4 M3 ]# G" [ printf("%02x ",(USC)hDataBuffer); ; f$ B% x, o2 R7 D" f6 g } + d, B' j3 [' ]4 u, A addr=addr+hDataLength; ; n" ~% f. o4 u2 d2 R+ B8 s }) \8 A6 d& c' @7 s) } else- `& j9 K5 w) R% J; w9 E/ J4 l { ; i& a7 ~5 m! T printf("can't read from board\n");* V: |6 l% K; Q8 j% X% T4 l1 { p exit(0); - T/ ^5 \& { q/ v& i/ ^2 x }0 [3 m- t' K0 W } 6 S& O# K6 S" x8 b. Z4 K% R% e7 ^* o printf("\n\n");8 T1 y( a3 K! I' p& G: s printf("%x bytes read from ram OK\n\n",TotalLen);

/*****************************************************/0 f/ n* N0 j9 a. e5 L4 x /* process rs232 test */, r2 d1 ]: t' y /* the first byte in this packet is command 's' */ $ Y. k8 W' s8 @% \* X/* and the following 2 bytes are used to set */ . @" ^$ S" J' \ Y x/* the baud rate of 8051 */' I5 r) u3 _+ Y2 C0 B: b i2 _ /* they will be write to TH1 and TL1 respectively*/, M1 x, C' U8 `- p# Q /* the following bytes are datas will be */ $ U5 X' J5 p! Q" |/* send through RS232 serial poart */: r$ V! @2 R. ]5 z2 O /*****************************************************/( s2 p4 N0 p/ O J printf("\npress any key to process RS232 Test\n"); 7 R3 @ h. j7 O3 z( `, |1 f. L getch();* m$ }6 S p: i5 M. S) J 9 {, Z$ |0 @4 \& z# y USC TH1,TL1; ! j+ k ?5 I( A& A char hStr[30]; 6 y1 T2 U _/ X+ a, \; H TH1=(USC)(BD9600/0x100);( E( e" V O1 n8 [- s TL1=(USC)(BD9600%0x100);6 j& q u" J- a- V hCommandBuffer[0] = 's'; //read command 0 P; P9 T4 O) N8 }/ v hCommandBuffer[1] = TH1; 4 B& c- R& F( ?7 Y hCommandBuffer[2] = TL1; //start address is 0x0000

strcpy(hStr, "Hi, dear HW9911 consumers! "); 2 u, I1 c8 d2 \+ o printf("Hi, dear HW9911 consumers! ");0 Y P% s& E5 h- i/ J1 n# a memcpy(&(hCommandBuffer[3]),hStr,27);

if ( hUSBIO( &hDeviceHandle,. t8 H2 V0 P) J& R hCommandBuffer,4 \2 m4 W# D, L- P- v: b8 g- |. F6 w 30, ' {5 h3 J0 D, u( L5 D9 U$ v. O hWritePipe1,, H0 k/ E$ z) K. x4 {; q FALSE) == FALSE) $ L3 _% Q+ w5 h, o. E2 ` {( T3 a2 S/ _, y3 o printf("can't write datas to RS232\n");0 Y) g j, C+ ^/ B. l5 L/ W5 a exit(0); ( U# o" X' b, _ n2 M1 ] }

strcpy(hStr, "I'm HW9911 Evaluation Board, "); - l: s* \, O1 l, G% T printf("I'm HW9911 Evaluation Board, ");: k% p U8 G: |. H1 H memcpy(&(hCommandBuffer[3]),hStr,29); " I; i7 R" q9 [- j " g' C$ n' ^. E$ o* t- m0 A if ( hUSBIO( &hDeviceHandle,/ i9 \8 `' g7 M hCommandBuffer, . n+ g/ ]/ B' B0 j 32,8 Q; ?; L/ m( I- @( W2 { hWritePipe1, 3 ?2 ], s4 E& c' B. l FALSE) == FALSE) ' {4 c6 r! x1 w A { # P. z- x- [' j7 p. V printf("can't write datas to RS232\n"); 8 }1 S5 Q2 A$ U! w8 g9 w exit(0); 3 D2 {8 ~. O" k9 q1 @5 A" }+ S }

strcpy(hStr, "thanks for purchasing me, ");' S" E/ M1 k1 H K D% m& p* z printf("thanks for purchasing me, "); 0 X+ _8 [4 \: o4 K" N5 h( s memcpy(&(hCommandBuffer[3]),hStr,26);8 b5 Y4 x7 k$ G: H 0 U/ l' V" _2 j- l/ C if ( hUSBIO( &hDeviceHandle, ) r- i' f4 f- c hCommandBuffer, & R! k! I+ k2 L 29, 2 x* z+ A: |8 M9 R% B# F+ B8 u0 Z$ T hWritePipe1,0 T- |* L7 N' U! ^ FALSE) == FALSE) * W( i% t$ J7 Q A5 S2 Q; q { . w3 `! w+ }4 L6 _2 X- k2 h8 y printf("can't write datas to RS232\n");! A) X/ u7 z! E( \/ R exit(0); 8 [. S$ r+ ^9 D8 R! h% z }5 g# V- y6 o$ L! T/ c ) \6 x; ]/ ~- \5 q9 z* F" C! R5 |( f& J$ ? strcpy(hStr, "If you meet some problems, ");' M9 p7 S4 s$ m& B p% g$ | printf(hStr, "If you meet some problems, "); : g1 \1 c9 D. v memcpy(&(hCommandBuffer[3]),hStr,27); ( y( `( x. ?# d Y' z " C d% v2 W- {. V; O/ }* U6 J6 P if ( hUSBIO( &hDeviceHandle,) {* r8 O. Z( ] hCommandBuffer, / C7 t' V& H. Y8 Z9 e- L) Q% q 30,+ d" t' M) H% Z# z J hWritePipe1, 6 M. I8 R/ z* p2 i$ K' l# @ FALSE) == FALSE) 3 m" l5 o/ ?* ?' u { . e' ^! C- e4 f# B printf("can't write datas to RS232\n"); , {' v7 X0 j4 o8 _/ f' j& ] exit(0);; s4 P/ R1 z" z3 x, p$ Y- l }

strcpy(hStr, "pls contact my designer "); * k3 _# U f- H% z2 C printf("pls contact my designer ");9 T6 O) s5 n0 D0 b3 ?! _+ n memcpy(&(hCommandBuffer[3]),hStr,24); 7 V* B# ~+ ~) p. z- a$ K % K2 j, i; ] |% V" p if ( hUSBIO( &hDeviceHandle, 7 I( w! l; V9 W- U hCommandBuffer, # h; ?* H Z% l, j 27, : I& |8 j3 A6 |" V& W hWritePipe1, 4 H0 G, X9 N( z0 N FALSE) == FALSE)( b+ i! h8 X" `) t; y( @# h, N& a {+ h) x4 q5 _/ ^) K$ y/ i% V) T printf("can't write datas to RS232\n"); ! V/ I' g9 }8 v1 u2 e1 M exit(0);6 F0 g) S( e. w0 d( _ }

strcpy(hStr, "by email: hugehard@263.net."); 7 [ Q" @& S4 c) @6 r# W printf("by email: hugehard@263.net.\n");( R0 W2 _0 r: m* S& w9 x memcpy(&(hCommandBuffer[3]),hStr,27); 2 I0 K) D0 g" H' M) y8 a 4 m, Q+ f. V: F! f6 p if ( hUSBIO( &hDeviceHandle,9 c6 g& h8 G- u hCommandBuffer, 8 |- G* D# h& ^% p4 k* D 30, 4 U) A' s6 W% R4 F hWritePipe1,9 t1 \1 T( F0 ], X FALSE) == FALSE) / y. i1 F! X2 y7 e { * Q9 ?9 v8 P G; Q' i4 u printf("can't write datas to RS232\n");+ D/ w! u2 t) E4 o) w) B: B% f% o exit(0); . g X7 q/ y4 s k* {2 j }$ y( U3 t( Q! c+ Z /********* call hDeviceOpen in hwdll.dll to open the board***/ 6 `/ H9 B7 l$ ^. R. @// hCloseDevice 说明: 4 g2 |9 E# H7 t+ D$ J9 P: |" E# S// BOOL hCloseDevice(HANDLE *DeviceHandle) 5 Q2 h$ h ~: \- X3 ~0 C* F1 ^// 作用:关闭设备 7 G$ G: D3 p$ j/ q$ B$ d// 参数说明: % t, }! M% z2 w& |) c% F// DeviceHandle:设备句柄+ n8 T: H7 W3 \# ?) c // 返回值:1 X( O) Y' S6 `* _ // 设备关闭成功返回 TRUE,失败则返回FALSE3 w3 j }. y# O# Y' W; | if( (hOpen = hCloseDevice( &hDeviceHandle ))==FALSE)4 w9 S9 p/ g z! }9 y {4 |/ G/ F7 _0 @ printf("can't open device\n");# n+ {; S# j( I+ }' S. J7 { printf("press any key to exit\n");' K% G) z! @3 T4 v2 Y3 W# ? getch();# f, O& B I9 @$ z! j0 Y% j" ?# u return 0;+ w" c* L: ?* P0 O } X+ ]( |% U# _2 _6 l, Q else , v" k2 f1 P" R- n' O( Z' ] printf("device closed\n");

printf("press any key to exit the program\n");+ R: N5 ^7 q4 n: E+ W+ e. ~ free(hDataBuffer);0 q8 w0 `( ]+ v" f free(hCommandBuffer);1 X% V: r: k. X: h+ c* s getch();' \( b9 g5 g$ O" P return 0; K5 g2 V1 {9 ~2 o8 m2 g }

( z3 R0 _1 g/ H, g+ b- _0 @ 8 k! f/ z: i- b! h7 A+ [/ o 5 l# |5 g9 H0 W5 F Top - g$ A1 s e( n/ c 3 O3 j7 b' T5 W: k! Q) V$ N8 S 回复人: aiyu33() ( ) 信誉:100 2003-12-17 11:41:24 得分:0 ; q' L! j8 a" u/ u2 D1 A 6 ]# A: V8 ]4 _3 d 2 V, E B2 c! u & Z- d9 e; c0 _; w; |# H# i upupupupupupup

4 b: ]! L- i: ~3 Y) }. g4 d - B! g" I5 i9 D7 z Top ( X. S+ A' _# @# N/ X6 a) F+ N 2 E7 P! s& g. h x; K/ U+ p. o 回复人: kingcaiyao(AKing) ( ) 信誉:110 2003-12-17 12:53:39 得分:0 $ r/ y' Q& g' Q ! @4 o& v0 P& E4 a( U1 ?& { 1 d; I% j* F8 _/ D% L ; S1 ]! x, b0 ~: ?$ V3 E你开发的这种软件类似于Palm Desktop Software,负责Pocket与PC之间通讯,我建议你最好先写一个驱动,将USB口虚拟成一个串口,然后直接对串口操作会很方便的。我现在做的程序可能和你相似是一个CDMA模块,通过USB口与PC机连接,然后由驱动程序将它虚拟成一个串口,我的工作就是和这个虚拟的串口通讯。

; h7 B& G, ^0 z9 `1 I9 C2 a 7 \8 b- c/ X9 P1 J0 e Top 3 T$ S- g6 \( w $ m" V/ M- R; o$ s2 x 回复人: kingcaiyao(AKing) ( ) 信誉:110 2003-12-17 12:56:27 得分:0 " j4 C) k: d8 ~) @, X+ ] 1 z" R1 b3 S3 }* x2 H ; c4 u; S( K+ j: w/ a% z' K( @ 4 K% Z: k% X2 g ~$ ~3 J/ J Pocket与PC连接肯定有驱动的,如果驱动程序没有将Pocket虚拟成一个串口,你也可以直接通过设备GUID和设备序列号进行访问,详情你参见我专栏上的一篇文章。当然了,通过虚拟串口来访问设备肯定要方便,简单些。

% }2 j( X: \- `1 B' a" _; x Z/ z# @8 O$ W8 D5 O9 L Top 0 I& I/ h) K$ \" ^; n: x4 p, t % A$ L. f8 t2 s6 f 回复人: aiyu33() ( ) 信誉:100 2003-12-17 13:31:08 得分:0 . f% }( ?' n' k2 ~3 k ) u* o1 z. ^' |! I* I 9 B, c1 F: ?( f2 i: X 0 a6 P9 M e3 e/ i 我得这款pocketpc默认只支持使用usb与pc相连的,而且activesync3.7就是使用usb传输数据的。如果我自己写驱动的话,不仅不熟悉而且很可能activesync3.7这个软件就使用不了。我只需要利用它的驱动。你的专栏上的那篇文章我也看了,我就是模仿你的写的代码,但就是到createfile这步就不行了,我的同事是用palm开发类似的程序,也是到这步就行不通了,是不是有其他的原因? 5 k, e+ K% R; f, a8 [3 q我还想问问如果驱动程序将pocket虚拟成串口,如何查看它的符号名呢?

. G$ F( K( ?2 [! }2 g . @! r& N9 S# P8 I) \$ q6 D8 j # @( L( ] A: \2 u) x2 vTop 4 ^& c7 H0 U! I* D0 V7 u( x4 s . R6 @* A5 w( p. k 回复人: kingcaiyao(AKing) ( ) 信誉:110 2003-12-17 16:53:17 得分:0 $ K* z- B8 q# r9 y ; I; B) j5 z4 R8 e* E0 f. z ! @7 ?2 x6 X; m6 p4 i- C $ ]' ]' I/ y# c假如将一个USB设备虚拟成串口的话,那么它的符号名可能是COM3,COM4,或COMn,这根据你当前PC机的配置而定 。它的符号名位于注册表中HKEY_LOCAL_MACHINE\CurrentControlSet中,你可以搜索注册表,另外在2000或以上的操作系统中,你可以到HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SerialComm中看到。

2 ]( t6 `$ L n* U# e 7 s; T1 l; h2 Z( q1 r$ TTop r; k0 C/ k. d4 q 4 o6 l# [- ?8 H* _ 回复人: kingcaiyao(AKing) ( ) 信誉:110 2003-12-17 16:55:33 得分:0 - o9 f! A+ [0 m* ] h# X# z ! U, s5 v E. Y/ j0 [9 Q, w 8 y+ w9 S' l2 h3 u! Y+ |& F 8 ?: K6 u$ X- c6 ?, F5 E& O我以前在一张贴子中详细回答了如何利用设备序列号和设备GUID来访问该设备,你可以搜索一下CSDN。你所说的CreateFile不能打通设备,你要查一下,你的符号名是否正确,包括设备序列号和设备GUID是否正确,设备GUID你可以从驱动程序的安装向导文件.inf中找到,设备序列号则需要你到注册表中去找。

) z. F0 c5 T: v1 @ 5 s/ q0 E; {$ r+ w3 C6 O Top , l n; b# x" J4 ~# b ! x0 A+ v- o- `/ W" R 回复人: gyj_china(透明) ( ) 信誉:98 2003-12-17 18:15:30 得分:90 ( H# _( `$ j8 P 3 M" \, t% U: ^% p ! o/ H& l+ x: ?! y & _! f% }" S- Y# y5 ~6 u6 I% B 没有星星不敢发言:(

0 D2 g! q. _5 z9 m( G& v% d* e 1 g9 D; S' Q2 h7 g& C Top ; B: J# D! T7 t' ] ! b# L0 g; j+ t8 S8 e8 j; r P 回复人: aiyu33() ( ) 信誉:100 2003-12-19 18:27:28 得分:0 ! D0 X+ _6 Y; K % {$ q2 S% i4 e. F# { ( r7 n$ |" n2 X - j" D# t4 T* }% B7 t) M不好意思,是因为ActiveSync3.7一直在系统服务程序中运行,占用了驱动程序,所以不能打开设备。我删除了ActiveSync3.7后就可以了。


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

大哥太好了

$ `( y; c Y G5 B4 [

正是我想要的

5 v9 e( m/ B/ |' J/ O

謝謝你


作者: 闹市的牧羊人    时间: 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
我是刚注册的新手 请各位大哥多关照
, y7 B" W1 ~4 ?; D$ l
作者: MichaeLonger    时间: 2014-6-18 21:13
路过。。。
作者: MichaeLonger    时间: 2014-6-18 21:13
水水。。。
作者: hitshijian    时间: 2015-2-3 10:25
赞一个!!!
: D  Z+ r- [$ V+ k
作者: SHERE201506    时间: 2015-8-26 11:00
谢谢楼主7 D0 q6 ~5 v4 \$ G7 v

作者: SHERE201506    时间: 2015-8-26 11:00
谢谢楼主  B% W9 B# H2 ?6 Q6 v8 i4 ?





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