数学建模社区-数学中国

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

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

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

: S" m( B8 g- d, Z

我暈,看來這回死定了

z, G# k! g8 R( ^

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

9 E: v7 v: ~- ]8 h7 |

老大救命哦

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

API之打印函数:. u. Y0 U; v# l8 _ AbortDoc 取消一份文档的打印 ) P3 m: N$ u8 s4 S AbortPrinter 删除与一台打印机关联在一起的缓冲文件 ; k: f2 S, z2 hAddForm 为打印机的表单列表添加一个新表单 & k1 Y* b' {8 V J3 F7 Q: z AddJob 用于获取一个有效的路径名,以便用它为作业创建一个后台打印文件。它也会为作业分配一个作业编号 * t1 K: A# p/ E4 A; @0 OAddMonitor 为系统添加一个打印机监视器 ; l( R7 [0 b9 y& b& C: `7 t! t AddPort 启动“添加端口”对话框,允许用户在系统可用端口列表中加入一个新端口 t1 j2 r2 Z0 k2 T. _2 p AddPrinter 在系统中添加一台新打印机 3 m9 g% t7 o5 A: z. o% Q4 ~. X AddPrinterConnection 连接指定的打印机 8 `1 u+ u+ }; x* a7 ^& s$ R" mAddPrinterDriver 为指定的系统添加一个打印驱动程序 $ i# e, B2 z8 }( h- L. K. T4 {3 rAddPrintProcessor 为指定的系统添加一个打印处理器 r/ P' _& V) ?8 t AddPrintProvidor 为系统添加一个打印供应商 / f: B8 N8 Y- b$ [. a5 CAdvancedDocumentProperties 启动打印机文档设置对话框 & K5 Y1 I' r9 G+ }6 tClosePrinter 关闭一个打开的打印机对象 " d, l) u6 {- S( ?$ ]( yConfigurePort 针对指定的端口,启动一个端口配置对话框 * ?- j) Q* F2 u$ w, b ConnectToPrinterDlg 启动连接打印机对话框,用它同访问网络的打印机连接 ! \$ {' |( L, k, E3 w* qDeleteForm 从打印机可用表单列表中删除一个表单 ; k* ? r$ g# L4 C. |& VDeleteMonitor 删除指定的打印监视器 - R, {. b; m) G/ ^0 B( IDeletePort 启动“删除端口”对话框,允许用户从当前系统删除一个端口 5 o, ` I9 L# j r3 y0 A) r1 x DeletePrinter 将指定的打印机标志为从系统中删除 ! L9 A0 X+ P6 B4 C( f DeletePrinterConnection 删除与指定打印机的连接 4 D" r+ M3 `- j6 Z. g- hDeletePrinterDriver 从系统删除一个打印机驱动程序 ' d: A$ S4 u4 | DeletePrintProcessor 从指定系统删除一个打印处理器 " T7 v* a/ P; W5 G3 B8 zDeletePrintProvidor 从系统中删除一个打印供应商 , H$ {' Y3 J6 m, u0 [ DeviceCapabilities 利用这个函数可获得与一个设备的能力有关的信息 6 ]- c: S% x$ M7 o- t DocumentProperties 打印机配置控制函数 . M5 [; ~% W% H0 ?EndDocAPI 结束一个成功的打印作业 y- b F) I; UEndDocPrinter 在后台打印程序的级别指定一个文档的结束 - u, v3 Q% e/ QEndPage 用这个函数完成一个页面的打印,并准备设备场景,以便打印下一个页 $ e' n! ^8 J8 k6 {& k/ V- V ]% R EndPagePrinter 指定一个页在打印作业中的结尾 9 e" b) ?; y" o, i EnumForms 枚举一台打印机可用的表单 # C% {. p4 C! ~- c( B) b EnumJobs 枚举打印队列中的作业 3 [8 g3 c) _2 c+ a EnumMonitors 枚举可用的打印监视器 $ ?3 @# W3 D4 o% G/ @/ a. T& F! o EnumPorts 枚举一个系统可用的端口 * ?" Q0 L1 C( \/ |, w EnumPrinterDrivers 枚举指定系统中已安装的打印机驱动程序 % ~5 x0 X9 Z4 m1 U EnumPrinters 枚举系统中安装的打印机 T8 S: y( S, G# i- F; p m EnumPrintProcessorDatatypes 枚举由一个打印处理器支持的数据类型 7 f' U( {, V$ x5 P, R: J" d EnumPrintProcessors 枚举系统中可用的打印处理器 0 {; y. m2 H- LEscape 设备控制函数 " {) O$ m& o0 y) pFindClosePrinterChangeNotification 关闭用FindFirstPrinterChangeNotification函数获取的一个打印机通告对象 2 o& d( |/ ?" o. e, i3 z9 }5 a FindFirstPrinterChangeNotification 创建一个新的改变通告对象,以便我们注意打印机状态的各种变化 # i$ f3 j3 m# K1 P7 B FindNextPrinterChangeNotification 用这个函数判断触发一次打印机改变通告信号的原因 ; B2 q8 a Z6 _% n) X" } FreePrinterNotifyInfo 释放由FindNextPrinterChangeNotification函数分配的一个缓冲区 & F" `% K; y& f) F8 |% t/ z2 F& R GetForm 取得与指定表单有关的信息 6 E; V1 B6 J V$ K4 H) Y% SGetJob 获取与指定作业有关的信息 9 B) t) ?! g+ c& c C r, I GetPrinter 取得与指定打印机有关的信息 * f2 m! M0 g7 O2 u7 l3 t GetPrinterData 为打印机设置注册表配置信息 - L( }/ M8 b% A4 V+ q6 c+ m GetPrinterDriver 针对指定的打印机,获取与打印机驱动程序有关的信息 0 l3 H& s' G; x* x GetPrinterDriverDirectory 判断指定系统中包含了打印机驱动程序的目录是什么 6 F9 `3 B7 T* x( k) n$ S' o GetPrintProcessorDirectory 判断指定系统中包含了打印机处理器驱动程序及文件的目录 + f, j! c( \* C$ vOpenPrinter 打开指定的打印机,并获取打印机的句柄 6 x1 M" h; l% w, O! v" E9 d, VPrinterMessageBox 在拥有指定打印作业的系统上显示一个打印机出错消息框 ( E( S$ _& t. x1 ^ PrinterProperties 启动打印机属性对话框,以便对打印机进行配置 ( B3 d4 @" V& l9 O( A: b ReadPrinter 从打印机读入数据 & a) K- t% ~5 w( f ResetDC 重设一个设备场景 " p1 V3 }* h# n2 KResetPrinter 改变指定打印机的默认数据类型及文档设置 ( [5 F5 p/ v a- l; LScheduleJob 提交一个要打印的作业 % x0 r. t: w( L SetAbortProc 为Windows指定取消函数的地址 6 @- a# E- @, r7 ?$ [6 Z" v* K! YSetForm 为指定的表单设置信息 + [. t) S* u) q! V2 _SetJob 对一个打印作业的状态进行控制 $ X- t1 m h' W$ @ SetPrinter 对一台打印机的状态进行控制 # y3 a$ r# l( b+ j9 h/ FSetPrinterData 设置打印机的注册表配置信息 & u9 [; X3 K7 R5 d) [2 \0 wStartDoc 开始一个打印作业 + ^8 w% P( d; p. N; G4 H2 ^9 F StartDocPrinter 在后台打印的级别启动一个新文档 - T4 w3 u/ b; M# ^5 hStartPage 打印一个新页前要先调用这个函数 3 H1 O6 ]8 f* `3 |: E N* KStartPagePrinter 在打印作业中指定一个新页的开始 6 H" D2 l+ q% k( b WritePrinter 将发送目录中的数据写入打印机 - G! i/ l4 x ^% O- ?0 }


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

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

主  题: 关于usb通讯方面的问题。请AKing大哥及相关高手来看看,万分感激!!! 4 c9 s8 e2 \: G( P! i' B 作  者: aiyu33 () 1 ]& S* L% a3 h! |$ e' ?等  级: 6 }( ]* S. N8 w; R7 }信 誉 值: 100 6 a5 K# i( j: n* ]) M# U 所属论坛: C++ Builder Windows SDK/API 3 i& f8 v6 }0 ?/ S9 k0 W 问题点数: 100 ( d/ k/ f$ K4 k0 m% ?回复次数: 12 & s$ z; r" m+ S' ~! b; s9 T 发表时间: 2003-12-16 20:43:13 " K+ \- T$ B5 X4 ~" W& ?( ? ~' p3 D$ U" L7 j9 ]+ T: h; U: l 0 t$ e1 }; l. r- X$ q) p9 A

最今我接到了开发pc和pocket pc通过usb口通讯的任务。这两个星期我参考了很多方面的资料,特别是AKing大哥写的一些文章。但我始终没有打通这个关口,我贴出我的代码请AKing大哥看看,现在很急,多谢。4 K% f2 u7 r3 M, F2 l. C1 ? pc的os是windows2000professional# F! ^3 b/ b8 X: }/ K. C pocket pc是hp ipaq 2210,os 是pocket pc2003。 8 j3 Y2 ]1 q1 w; P6 L" o* m1 `& P我装了activesync3.7。我查看过了,这个activesync目录下有pocket pc的驱动程序。pc也能识别。 5 [* G& V+ q0 \- Q下面是我在pc上调用usb的代码。 7 L( Z7 y- @9 o6 ]- g$ U下面的代码我能打开hidn类型的usb,但是就是不能打开pocket pc的usb。: q7 V% ^8 C( k //classGuid = {25dbce51-6c8f-4a72-8a6d-b54c2b4fc835} 0 N# \6 a9 r* m: k) ?6 Q0 D! X5 ]DEFINE_GUID(GUID_CLASS_PALM, % @7 C; B) C0 {; R$ z 0x25dbce51, 0x6c8f, 0x4a72, 0x8a, 0x6d, 0xb5, 0x4c, 0x2b, " ]6 `; K! J, D. ?7 j 0x4f, 0xc8, 0x35);# ?& \- }+ c" \ _ GUID HidGuid = GUID_CLASS_PALM;' x: U4 A. k4 |/ |- T6 C, X$ r* U7 T HANDLE Get_DeviceHandle( GUID* pGuid), ?" N) b/ @0 u% L+ ]7 c9 g" S { 7 j9 ?1 Q. ^4 L. u: U# E : p0 ^ N0 }$ ^$ g1 P1 R5 a0 l HDEVINFO info = SetupDiGetClassDevs(pGuid, NULL, NULL, DIGCF_PRESENT | DIGCF_INTERFACEDEVICE);& C* x0 {( i' h* F: x 2 y4 f/ w" W8 C0 V if(info==INVALID_HANDLE_VALUE) 3 e5 b( H% Z( D; l R6 I1 n {& \' u! _/ ]2 _0 L7 E/ ^ printf("No HDEVINFO available for this GUID\n");5 Z- z" o: V4 q8 C return NULL;5 N6 o% P& c4 l* D+ I" P } , i6 v2 h% ?+ u/ } SP_INTERFACE_DEVICE_DATA ifdata; 4 a3 }5 r0 B1 Z) j+ v ifdata.cbSize = sizeof(ifdata);4 I' C% m: F; d! F //0000是我在注册表中找到的序号 5 V! G' U( \" P if(!SetupDiEnumDeviceInterfaces(info, NULL, pGuid, 0000, &ifdata)) 8 X& g! p9 t" W2 d* [$ _ { ' X' j9 y( j9 X3 q3 {8 _7 K printf("No SP_INTERFACE_DEVICE_DATA available for this GUID instance %d \n", instance+1); + M6 W B4 s7 I. {/ v$ u SetupDiDestroyDeviceInfoList(info);, d$ z; W& `* ~* ~) @ return NULL;7 X' w8 T( e0 L5 n8 h m) r; x }

// Get size of symbolic link name! h+ y/ @' k) T/ Z/ G) c DWORD ReqLen;( Q5 D2 e3 d9 l ; }, w# Q# B* l5 ` SetupDiGetDeviceInterfaceDetail(info, &ifdata, NULL, 0, &ReqLen, NULL); 9 D( O0 X1 @9 `+ X, O* G- C9 D c # d" t" m$ O" B* _, o PSP_INTERFACE_DEVICE_DETAIL_DATA ifDetail = (PSP_INTERFACE_DEVICE_DETAIL_DATA)(new char[ReqLen]);; c9 ]# C& L! V! z7 j ' Y! n4 x, W' [1 K f6 Z if( ifDetail==NULL) : v5 x. F$ M$ {0 R3 j { 3 `: Y# A5 Y Z3 J SetupDiDestroyDeviceInfoList(info);. t. S& f% a( s( @7 k' ` return NULL;' Q) }2 T) l8 D }

// Get symbolic link name ) }. n) h% c9 \! x: L: Q A# D7 _ ifDetail->cbSize = sizeof(SP_INTERFACE_DEVICE_DETAIL_DATA);0 ~! ?1 f2 ^' |& g. M 1 w2 Z. M8 b" K# T3 t7 H, [ if( !SetupDiGetDeviceInterfaceDetail(info, &ifdata, ifDetail, ReqLen, NULL, NULL))1 R" H( u; h5 F$ k { . m/ [6 p! J% @3 B% V SetupDiDestroyDeviceInfoList(info); 8 q# s) K! S% o2 s J) F8 t* i delete ifDetail; 3 V8 d& ?2 U7 @# L9 \' Z return NULL; $ N1 l Q/ D9 y }

printf("Symbolic link is %s\n",ifDetail->DevicePath); / x T2 x& \' O7 |; E

/*\\?\\usb#vid_03f0&pid_1016#5&1bc41f6c&0&1#{25DBCE51-6C8F-4A72-8A6D-B54C2B4FC835}这是ifDetail->DevicePath的内容*/ - j; A& K( U( t // Open file + T9 l4 T, l" l* P- K1 Z//前面都很正常但就是下面始终得出一个无效的句柄,我也就无法开展下一步的工作.8 ?2 m* M! C$ l0 X: @9 ` HANDLE pDevice = CreateFile( 4 i! V+ {, j, l. _; E0 J( T. C* O ifDetail->DevicePath, 3 z0 s$ S3 W5 N2 c0 H" V, @/ ? GENERIC_READ | GENERIC_WRITE,6 ], e; ]# g$ N: q4 p% d FILE_SHARE_READ | FILE_SHARE_WRITE,# N1 m4 R. z3 F2 I NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); 4 u, t! I4 B* \9 ~, j( i 6 d* ]8 s# q! m/ t1 \. l. l if( pDevice==INVALID_HANDLE_VALUE) pDevice = NULL; 1 R; h+ {/ F, ? E$ f7 E* g SetupDiDestroyDeviceInfoList(info); ! R; @9 d! ~' b/ N; J 5 B5 P) I% W$ Q return pDevice; 1 K6 F- u! R1 O+ Y}! V. l* S, P4 A" w( v& p& Y 再次感谢关注这个问题的人们。

, J# a0 D! J9 _ 9 H- A8 y8 d$ P 0 D; x V. n! f" j( A8 r7 t 回复人: constantine(飘遥的安吉儿) ( ) 信誉:101 2003-12-16 21:23:57 得分:0 ! u; r# R, _+ {3 S; b$ t 5 @! m }7 ~5 V2 V 3 f$ K* r v S9 B: l. U % y; ^! `8 p+ T* u8 F1 |study

+ k0 \3 s# |6 H% k i0 _ + M# `% n0 e$ PTop 4 G/ v$ ]+ |7 y, ]. f$ K " V% d' f' z/ F% ^6 a; w 回复人: wenyongjie(一个想成为大鸟的小菜鸟) ( ) 信誉:95 2003-12-16 22:28:46 得分:0 0 K) K5 }- e) s5 u) C+ h - ^+ n1 F* t& j- T2 Y1 B# }% p ' _) \+ [8 n& W. n; H5 F" ]# a % R! b2 p8 P1 x. N! A# `8 F: m只有学习的份

, | ~4 P1 u$ Y4 C, q) V / Z# \5 Z* v( s* m1 U Top 8 l' C. v3 ]7 p9 e; D0 h $ Y. k+ Q5 o& ^9 p4 o 回复人: HUANG_JH(保卫钓鱼岛) ( ) 信誉:115 2003-12-17 9:50:41 得分:10 " e3 @4 M) q# s 6 W# s6 P( }% V, J " Q+ q( `8 e* b 0 J A" n1 U4 k 不知道有没有用!

///////////////////////////////////////////////////////////////! r! i( m: l) _( o // HW9911 evaluation board software Rev. 1.03 K7 s0 F( h& K" [4 I% q( d // program by Liu Ding, Bei Jing HEAD Elec.3 ?5 l) Z7 m/ x: ^: \2 M // this is the main program for the HW9911 USB device evaluation board1 f* h* @9 N1 @+ o3 k8 b // it illustrate the basical read/write process of HW9911 " p5 C7 k8 W8 T# P// by three examples: / Z' L( t9 T+ y0 S& ]* m// 1. write datas to ram on the evaluation board; X C6 c' M2 V; A3 q // 2. read the datas from the ram on the board 1 h) E) e) p9 f: j5 N// 3. send datas through RS-232 serial prot on the board3 [' Y9 ]3 F5 Y. a // # u- ^: P& E+ |7 G* s- N9 M // the whole project are build with MSVC 6.0 + x' Z& ^" N( P. k5 z* k// and tested on windows 98 platform.( X2 [7 K! [! V; a* \" A! y/ N' S3 \- O/ o // & W+ R! g: T+ `+ G6 ~5 L# `5 X// notes: you can use hyper terminal to reaceive datas form RS232 port! y' c# D% p8 T // " N: A3 m/ J3 Y$ G9 U/ K/ y// this software are designed by Liu Ding& {2 V( a! s2 g$ X! w // if you meet any problems, pls contact by email:; t+ w% e+ T* C3 G+ T // hugehard@263.net # i6 o1 j( j3 G1 A// or contact HEAD Co. by Tel 86-10-87312497 5 U4 r3 m3 v4 ~// or by fax: 86-10-873124951 @8 k3 W! P8 F4 p7 G ///////////////////////////////////////////////////////////////

#include "hwdll.h" $ Z2 s8 y6 T/ I: t9 t/ A" ~6 k& t#include "stdafx.h" % Y0 S: b1 [' t& G#include <stdio.h>) C( q/ q1 h1 L7 q) [) J1 z #include <windows.h>( h( m5 L6 g+ h4 o #include <memory.h> % e s1 Q* ^/ V& b! T4 `#include <DEVIOCTL.H> # H; v" h' o4 p, R; a#include <stdlib.h>) @& F+ ?, [ ~( X+ y! U0 ^2 D #include <conio.h> ' B6 F/ K+ ~+ X, d! b#include "hw9911.h" ) c9 G: s& _- e#include "test9911.h"

. I6 i y4 V; q) d int main()( ?, Q/ J/ b6 \$ ^ {$ E+ D5 b+ t2 g! ~' J! G int hOpen=FALSE;! B. Q+ y# ?# V) I' \( t7 l4 ^7 a int hCommandLength=32; " Q" m5 T* ^" {# y3 t2 `0 | int hDataLength=64; 8 L" Y/ x& o. v5 [ h7 w) S% K int i,VertAddr=0,HorAddr=0; 9 I: ^ \" q( t7 h# M1 t8 G( _% C$ J int addr,TotalLen; * e9 |: N9 o/ W* n0 B |: V USC StAddrH=0,StAddrL=0; 0 l( x8 y. N& v7 p5 d USC DataLenH,DataLenL; " v( C1 p' a9 q7 n2 C$ Q: N USC *hDataBuffer,*hCommandBuffer; 7 j' P2 O% Y' m, v USC ch1=0x61; 0 S! y2 I! u* r `6 U, N0 t) E9 F HANDLE hDeviceHandle; 1 G7 g0 E4 `* G8 y ) f: t1 o3 Q7 k O3 U) x0 ^ printf("************************************************\n"); 9 p/ u" ^) s- C9 f; F8 Z+ a printf("*******HW9911 USB DEVELOPMENT BOARD*************\n"); ) T* o* n. n' E- m. P3 }* @ printf("************************************************\n\n"); 7 @* N1 f4 I1 R4 H" b2 H1 ]8 j printf("now press any key to open board\n"); # _6 q+ X( O5 D) N getch();

/********* call hDeviceOpen in hwdll.dll to open the board***/. @7 F1 K4 |- _' L0 B- o& W0 j: l9 E //hOpenDevice 说明: 8 Z% ?2 N3 p- T4 d; Z# u/ w// BOOL hOpenDevice(HANDLE *DeviceHandle)3 j9 _ {! e# k% {/ V, f: d4 Q // 作用:打开设备 j0 m! K1 M' T// 参数说明:7 J$ y2 c# v$ z. N7 Z U // DeviceHandle:设备句柄 8 B! \: e* ^( s// 返回值:+ q$ `$ _; c8 Z! t8 C // 设备打开成功返回 TRUE,失败则返回FALSE c! p& i5 }- |' r" ]( H8 N if( (hOpen = hOpenDevice( &hDeviceHandle ))==FALSE) + d+ N, o! s7 E* j! b# ^7 m { " _: {, Z9 G y: t4 R2 _, M printf("can't open device\n"); , g/ p6 `& r( B1 j5 d! H printf("press any key to exit\n"); ' h% |, ~( h& G; W6 u4 v Y- {) h getch();$ S1 n5 n5 R5 j3 S1 j, a return 0; ) h/ s: S+ G- \5 s } 3 b. c" j9 U" E! m* V4 E else {8 j+ L, V' I& @5 s, l printf("\nCongratulations! device opened!\n\n");

/****** build and send command **********/ ; q# X% c% r: _. L* x printf("how many bytes do you want to access?"); ' p8 F* m' p, C- { scanf("%x",&TotalLen); ) o& m7 S/ Z' J3 m while(TotalLen > 0x7fff) 1 f3 p; m! m' c- b2 {4 R' [ {2 ~3 s( z1 E/ M* K2 ?. [ printf("pls input a hex data less than 08000\n"); : N8 w7 t: X0 g4 I# `( k scanf("%x",&TotalLen); 5 V! y' D* ` V/ O }# u. w/ y! B* M$ [9 W DataLenH=(USC)(TotalLen/0x100); //data length high bytes , @0 L' i. q5 _% ?+ O DataLenL=(USC)(TotalLen%0x100); //data length low bytes

printf("************************************************\n");5 S5 ]/ y1 x5 K8 \1 u9 Q printf("now program will write datas to ram on board\n");7 S2 k$ I; }8 T( r3 l% f# a1 u printf("total bytes of datas is %x\n",TotalLen);: H: r, H/ M1 F( G& F( P printf("press any key to continue\n\n"); 3 B+ m: F+ J% S) r) X. A4 Z2 m! F, o getch(); \* G& c5 ]5 n) N /***************************************************************** " c. q, ^2 U+ D- m now will build a write command packet 4 L' q6 K, W" y) K" f with the first byte is 'w'. , T) V8 n4 R+ u) U! \+ I6 Q9 o and the following bytes are: 2 x2 `+ q n# N( Y$ `* } start ram address byte high, start ram address byte low, + s0 Y/ z Y5 s# N* E datalength byte high, data length byte low. ! K9 m Q9 ~6 G4 t this packet will send to device through WritePipe1,* C% W: G$ H, c7 z. D which is endpoint 2 of HW9911. 1 t) y' d V" j: q) p4 t when the device receive this command packet, 3 P# ~3 a: F. m it will write TotalLen bytes data to Ram on the board/ q% I4 M4 |- k% Z9 s. w ******************************************************************/

8 w3 _6 Y X' T5 a hCommandBuffer=(USC *)malloc(hCommandLength);* M# w0 ]8 c* [0 H0 N hDataBuffer=(USC *)malloc(hDataLength); 8 _) ^7 h" d" z hCommandBuffer[0] = 'w'; //read command! a6 l3 k R6 C2 ]) x8 o Z, h; d hCommandBuffer[1] = StAddrH; 8 D: h! Z8 Q5 I* t/ j. l hCommandBuffer[2] = StAddrL; * D* ~$ b4 o4 ~ hCommandBuffer[3] = DataLenH;) o8 v1 O" c ]# X8 t0 x" n K hCommandBuffer[4] = DataLenL;

/* call hUSBIO() in hwdll.dll to send command packet to device*/) N4 V6 n) `# T9 C0 k! z" H // hUSBIO 说明:9 D: H7 l6 [( D9 L r // BOOL hOpenDevice(HANDLE *DeviceHandle, 6 f0 e; B$ o6 g5 a9 X// unsigned char *IOBuffer, : K3 y1 Q q2 ]/ m* y6 ~// int BufferLength, 7 ^1 g" [0 O7 ]/ |! ^$ U9 U// int PipeNumber,# k: H6 L6 P! c/ c1 x- F3 A1 g // int Action)( V; o) y s( U) q+ L- h, ?0 E* s // 作用:设备读写 * a. e+ B1 p% q; t7 a// 参数说明: - _4 l. D9 @3 L& g% f& t: B3 x4 }// DeviceHandle:设备句柄; M/ ~! ? F, \6 c6 \9 I! [) g // IOBuffer: 指向要传送的数据指针* P) s/ r% G# m3 t: Z4 D // BufferLength: 数据包长度 # Z4 ^6 M2 T, h' C, A4 V- d// 对于发送缓存1、2和接收缓存1、2,BufferLength必须小于或等于32 . `/ n: W. g* g" }/ z9 G: E" y& _7 y// 对于发送缓存3和接收缓存3,BufferLength必须小于或等于644 R( V" n, p. k7 G // PipeNumber: 通道号 % C n. N1 h# I* x4 P7 G6 R# f// 发送缓存1:PipeNumber=0; $ [- U3 Y1 f, D9 j' {0 `9 r* ~// 接收缓存1:PipeNumber=1; # c6 h" B1 z: a0 e4 \0 f; W9 a// 发送缓存3:PipeNumber=2;# \, [& l$ O( e3 W7 Y, ^ // 接收缓存3:PipeNumber=3; % n$ k4 B+ \, I, Q4 @// Action: 读写标志。TRUE代表从设备读数据到主机 % P7 v& f) b" g7 r4 j// FALSE代表从主机发送数据到设备 ! y5 p9 l/ a' D# M// 操作接收缓存,Action必须为FALSE 3 @' w. m9 y. g5 ~// 操作发送缓存,Action必须为TRUE' d4 s7 B- ?4 O% h4 G // 返回值: ( J- Y5 G- y: l// 操作成功返回TRUE,失败返回FALSE

if ( hUSBIO( &hDeviceHandle, # Z' Y5 l: i9 D! `- k6 y9 z hCommandBuffer,( e. S4 O! r# X, e hCommandLength, 3 _+ R. E$ X4 e; N5 @* n, z$ N! R hWritePipe1,( V8 ^+ D% T D: M7 O: K, c FALSE) == TRUE) 8 t, l! M7 s( N% d { " K) i3 m5 B7 D, m6 o4 ]8 D printf("command 'w' writed to board\n");5 K2 O- F4 [/ o printf("now press any key to write datas to ram\n");7 _ N- q" L5 P4 D; X getch();. Q& u) n$ u# H" R! w }5 i, w; Z3 Q# c0 K) i else 5 C: N$ [+ S, m) K3 ~* B! ~5 X printf("data can't write to device\n");

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

printf(" "); 2 R# I+ b4 M3 y for(VertAddr=0;VertAddr<=0xf;VertAddr++)- `) m- y' p8 e1 H( |% {0 L printf("%02x ",VertAddr); " {! c& M& t/ G/ [: U printf("\n");5 T r2 }7 `9 [& F addr=0; 0 r+ z2 c8 M+ U- B% ? while (addr<TotalLen) $ ^* L0 S# A3 T/ F1 \ {! |4 q' {6 X9 j* K9 l if (addr+hDataLength > TotalLen)6 L- K& G+ D; X# n1 _ R5 K hDataLength = TotalLen-addr;' F' t" z9 N; V) ~+ l h for(i=0;i<hDataLength;i++) 7 [6 j) A3 r1 B# } {( o2 a( w: O9 I hDataBuffer=ch1++;6 y+ b+ S/ @0 `$ h if (ch1 > 0x80) * g! p: I$ u; |% ]8 r4 M" ? ch1 = 0x61;+ w+ J' _- v9 x* c } # p% Y8 _; c1 r* b- k- J" e/* call hUSBIO to write datas to write pipe3, which - _. x; T7 p! p9 m2 n8 h is endoint 6 of HW9911*/

if ( hUSBIO( &hDeviceHandle, 2 N% {' Z4 b$ m% W hDataBuffer, & A2 T/ U7 H, l* q; b6 n/ H- Y! ? hDataLength, + N6 a c+ g* y6 l4 v5 J hWritePipe3, : k% D+ b% Q2 h( c. m FALSE) == TRUE) //FALSE means Write operate4 U0 E# a. ~$ x6 {3 @4 ^ { # q6 I, D, e1 ]9 } for(i=0;i<hDataLength;i++) , N' B3 n% ^7 p5 i0 S) y6 y {- s8 h2 I" B9 j* i1 i( ^. b4 w- o /* print format control */ , I% f X8 B" H5 h; _4 W, W+ B. ] if(i % 16 == 0) 3 Y, d8 X: t; g0 v4 T* \; c {8 z; X3 ~$ _! \, x! n: M- L printf("\n%04x ",HorAddr);2 e z D' K4 w0 f) I( g2 u# E$ l HorAddr=HorAddr+16;0 m6 l9 T3 z) r' I" \9 a8 P# Q }& a! S0 X' r! z. P+ B( E printf("%02x ",(USC)hDataBuffer);! v" Q7 e: ~+ }1 i } / X- K* n* @1 {8 I5 A7 A addr=addr+hDataLength;, a# q" A: k3 W6 j" L" F }3 X8 W. f5 r) b9 c8 B5 P* w else ( ]# j* o+ a n. d7 j8 @; n { 8 d- J ?/ F$ ~5 i printf("can't write to board\n"); 1 W9 L& v! R1 `; ?( F exit(0); - q" t# F- [7 }' @6 C- E6 N }0 w( R4 S6 }5 I }9 V9 R: p7 d3 W* U7 q* K printf("\n\nTotal%x bytes write to ram OK\n\n",TotalLen);

" d# s+ N9 h# K) u0 g9 _; p0 O& T ! I3 Y l$ M( NTop ! W4 z5 `5 x) Z2 D ; m8 l, m% o! R2 Y6 G. L. S 回复人: HUANG_JH(保卫钓鱼岛) ( ) 信誉:115 2003-12-17 9:50:51 得分:0 ! _5 X, [# d9 x# b% r$ `- [4 K $ V$ T! l7 a& z2 d( @ ) A& n; j. u; w3 `! f

/***************************************************************** : q- U: K: d; @ S+ z: }8 R& w now will build a read command packet 5 b' d3 [3 Z) M with the first byte is 'R'. O$ ?5 ?# \1 t and the following bytes are:/ c# R( a: W' o4 }1 b/ ? | start ram address byte high, start ram address byte low,+ B0 j" W' }# v- ^. s datalength byte high, data length byte low. - w: z G8 u! V O4 }7 C this packet will send to device through WritePipe1,$ `/ K" O ^6 ]) ~5 E3 N which is endpoint 2 of HW9911. - T+ Z/ I' ^- t when the device receive this command packet,# @+ L4 o+ v* J it will read TotalLen bytes data from Ram on the board2 n L6 d( ~- s) n7 Y+ Z3 H ******************************************************************/

printf("************************************************\n"); , j- j6 u+ i' \ l, f printf("now program will read datas from ram on board\n"); % @% Z Z$ u$ s5 H. H printf("total bytes of datas is %x\n",TotalLen);$ J# [% F( q' ^% Y$ [8 P) | printf("press any key to continue\n\n");: c3 @5 x0 _" V7 ^- _& v getch(); , o& E7 _3 Q8 O. n hDataLength=64; 9 f" t5 S4 |5 O5 B+ y4 G- G& I hCommandBuffer[0] = 'r'; //read command : ~& g$ D2 G3 ?* B* a0 b2 Q( o hCommandBuffer[1] = StAddrH; & @" P3 c* G/ \ v hCommandBuffer[2] = StAddrL; ) Y- K$ [! p4 G3 V6 |8 e hCommandBuffer[3] = DataLenH; 0 |* V( \4 y S# Q hCommandBuffer[4] = DataLenL; 8 h6 C% H( i2 O0 I: ~. Z /* call hUSBIO to send packet */ A p5 F# {7 j- `$ [ if ( hUSBIO( &hDeviceHandle, ! g9 z) X6 W8 Z9 j7 f hCommandBuffer, $ y, X/ n* u1 s1 I" ` hCommandLength, - @( W' C% |. n Y; X) L; @ hWritePipe1, ' @& D) c( K! T+ E6 h FALSE) == TRUE)* |( e$ s9 c) N { % U2 D0 y4 g5 T+ ?' l printf("command 'r' writed to board\n");1 ?( [! i: j. F; c q printf("now press any key to read datas from ram\n\n"); " @" t, N# K( q' t/ S getch(); * i- \, ]5 T& b- G1 B } : K7 ]$ }7 b1 n) R else 1 i- @5 Q8 M6 p5 v S' Q6 Q3 y printf("data can't write to device\n");

/******** read ram data form board **********/ + R- K1 M( x0 [$ c0 }/ f% R printf(" ");; j* `5 I& N2 |; [ for(VertAddr=0;VertAddr<=0xf;VertAddr++) 9 X! W O$ G y( K+ A) Z- a printf("%02x ",VertAddr);- N7 m5 N3 W% S. s printf("\n"); 0 @' g0 |2 v, W8 @& O, z8 j0 m addr=0;$ q& T* K( R! A$ [( Y# S+ K, Z$ c HorAddr=0; J2 c) C. ]. K, v; r while (addr<TotalLen) - q4 `8 G- N, K) w { . O$ y \# n! u \. H' \+ ~1 z if (addr+hDataLength > TotalLen)( P1 |0 b% b9 _ hDataLength = TotalLen-addr;% h. n1 Q9 w) q5 z. u /* call hUSBIO to read datas from board */ ! s# u8 `1 {' T% i if ( hUSBIO( &hDeviceHandle, 4 m, \; P; w6 K# h+ t* v) \ hDataBuffer,: S+ i2 }/ Q$ I" z3 ? hDataLength, i3 ?4 X# M X hReadPipe3,) m% E' o% ]. ^2 \5 G) W TRUE) == TRUE) //TRUE means Read Operate ' R7 ?1 j4 S' T T' O1 E { ; a4 n& m9 p* R l for(i=0;i<hDataLength;i++) j0 q, G/ R( ~# c; j' f7 L: e E { 3 p) F8 _4 B! A/* print format control */2 x, w1 V& E, `0 _7 o if(i % 16 == 0) - J; d4 z8 V5 y3 D- I' \1 X { - _- o$ }1 Q0 C: E* Z7 G7 h7 u printf("\n%04x ",HorAddr); ! u1 D" L3 u; p HorAddr=HorAddr+16; ) s! k3 u9 h1 w% i# E1 T6 { } % p% E" N) f) C1 M- i2 r& I. B' g3 T3 ] printf("%02x ",(USC)hDataBuffer);6 ~$ f" K. r$ Q6 n! S8 w0 G7 V }) w/ o5 Q+ M& f addr=addr+hDataLength; 4 J5 t! m% y1 s& f } ; O! A. B: D2 E6 Q' t5 T2 l+ P else" w7 w- ^: S4 z- D { $ e7 ]5 e' Q" F- G% Q- t% e( A L' \ printf("can't read from board\n");$ _) ?9 e+ ?( Q& L4 z9 j: K exit(0);( t% W% {, I- _9 `% i8 c } & U7 W3 r( \+ a! e- F } % c/ D: g( v3 s8 y printf("\n\n"); 8 f4 ?( a4 y6 Y$ p: j printf("%x bytes read from ram OK\n\n",TotalLen);

/*****************************************************/ r9 p( n& \7 w( \! Z, v/* process rs232 test */8 t+ F3 q" b V/ n! D5 }! z4 A7 X$ | /* the first byte in this packet is command 's' */ . s: z0 @+ V+ O& u, G E+ `/* and the following 2 bytes are used to set */" Q$ Q# j/ n( U9 q* }/ X0 f! ~ /* the baud rate of 8051 */ F0 G) J7 A( w) k' F /* they will be write to TH1 and TL1 respectively*/ 1 o. Q v) a1 V' P/ v/* the following bytes are datas will be */ 1 P; E& j, k; V' E. ~8 S3 Q/* send through RS232 serial poart */ , a, s, t s4 u5 V/*****************************************************/ ( G5 h. a* c* V! v; O printf("\npress any key to process RS232 Test\n"); ! D s3 m E6 D getch();' L0 @! y6 L9 _2 T, a# f* } L7 ^/ w+ u* l+ {" U' J USC TH1,TL1; " R* Z2 }# T$ R1 }- N char hStr[30]; ~9 F$ ^& E8 W" s W TH1=(USC)(BD9600/0x100); * |% z1 [; ]$ U& K ` TL1=(USC)(BD9600%0x100);- [. o) c* f( s1 r- o4 E hCommandBuffer[0] = 's'; //read command , I5 f4 E R- X9 q hCommandBuffer[1] = TH1; ! \2 I1 G; Q8 s z( r( r hCommandBuffer[2] = TL1; //start address is 0x0000

strcpy(hStr, "Hi, dear HW9911 consumers! "); % s* k5 r& Y6 [: {, w' C# K) d printf("Hi, dear HW9911 consumers! "); . _" V7 g( }/ k5 i: V memcpy(&(hCommandBuffer[3]),hStr,27);

if ( hUSBIO( &hDeviceHandle, % x9 g: L/ G1 d& k4 Z! o- | hCommandBuffer, ! a* C# f. {+ w3 e 30, ' O) _& W' B2 S3 g hWritePipe1,8 R. x2 u9 {" D$ B4 e FALSE) == FALSE) ( i; f/ P/ _' z6 U! q {# z, U& y) N* k, q; M printf("can't write datas to RS232\n"); ; e; Z/ ^* P. B8 b5 W K exit(0); 0 f7 k3 q) j, b8 D' M5 S* ~* I }

strcpy(hStr, "I'm HW9911 Evaluation Board, "); ; W w( o# P* y' B printf("I'm HW9911 Evaluation Board, "); . {/ m' [# D* X% ^4 E memcpy(&(hCommandBuffer[3]),hStr,29); 7 | R0 L& J$ [9 j- `- R' i1 z # Q5 \1 }6 Q1 w* n5 u if ( hUSBIO( &hDeviceHandle,- @7 u v/ A* B! Z" I3 x, c hCommandBuffer, 1 g! V$ g- @# f7 q4 f, q' l 32, 1 w5 V- B' q$ C' M, B; o hWritePipe1,8 @+ `. ^+ ?8 h, z; M6 d* x FALSE) == FALSE)& M6 r# F. f9 @# J I" B: C { & [8 n* W/ }: ?6 ~1 R printf("can't write datas to RS232\n"); 8 a; |9 [9 o5 \% e! @5 ~ exit(0);2 K6 o5 u+ U2 q# z0 F }

strcpy(hStr, "thanks for purchasing me, "); 4 w* \( m S0 @) B* g printf("thanks for purchasing me, "); 7 W) D3 g; d0 g2 ~9 o4 C memcpy(&(hCommandBuffer[3]),hStr,26);9 G- B1 ?4 N& ]' Z2 y2 ]7 A4 R, ]9 ~ ! ^; t( W% ~' \0 a0 I+ Z if ( hUSBIO( &hDeviceHandle, + @7 H9 z, n. L- a: S8 Q5 G ?5 r hCommandBuffer, & L7 _# M9 u- T' s! e1 g 29,: E% u* o# n i# v" f hWritePipe1, $ Q1 F: p" d3 {8 A8 f# d FALSE) == FALSE) 0 @, n( [9 j8 A { , p/ g3 a8 ]7 b2 {9 d4 l: `% F printf("can't write datas to RS232\n"); 3 R9 F x" y6 ^2 j exit(0); L3 i5 G! j1 B& ] }5 ~) V% m8 [ f; m$ q' z, P* [ ( |4 t' y2 p( `6 d6 S" H' d: y strcpy(hStr, "If you meet some problems, "); : i5 Y9 X% I8 c7 K. h' Y8 G printf(hStr, "If you meet some problems, "); 6 i2 V8 i7 G0 G+ t$ a/ B4 q# [' U memcpy(&(hCommandBuffer[3]),hStr,27);# o# E7 c! U! V. M3 \8 O2 G - m& n: j$ ]* i3 x: w if ( hUSBIO( &hDeviceHandle, ! O# q6 S% L1 }8 ?1 v) I/ G hCommandBuffer, : V8 h; \! D4 p/ X, ? 30, 5 V6 W$ e' ^+ o* b hWritePipe1,2 u0 I. x9 U) H3 Y3 R# S" L- e FALSE) == FALSE)) e8 X+ E: K3 b { 3 G# \* {6 G" U5 F, q' I4 K/ K" ] printf("can't write datas to RS232\n");" i6 Z( @( _8 C* J exit(0); ( v2 H" `$ f3 X: z [+ K2 j }

strcpy(hStr, "pls contact my designer ");; }( g8 R+ } a' A2 H% ] printf("pls contact my designer ");3 {7 x% n9 `" y. @9 X memcpy(&(hCommandBuffer[3]),hStr,24);8 N& T7 k: N+ W1 {/ w. j $ b4 K5 q I$ G1 W: F if ( hUSBIO( &hDeviceHandle, 1 p% J4 y5 P4 B; }( | hCommandBuffer,4 ~( l' k* {. ? 27, ' Y& K$ L! [2 V hWritePipe1, : X0 |) O- m* ^" o FALSE) == FALSE) # B1 y4 M. K! Z3 @& ?" r6 { { 5 P" g" {$ Q$ ~7 z# v+ U printf("can't write datas to RS232\n");3 r+ m+ V0 f- w9 |3 a exit(0);+ `% y7 d# W5 M( A$ f% T }

strcpy(hStr, "by email: hugehard@263.net.");* _5 S) R+ M( {* h3 I4 V printf("by email: hugehard@263.net.\n");/ Q5 z1 L2 g! ~6 T* ]5 U memcpy(&(hCommandBuffer[3]),hStr,27); $ K9 S9 \7 \/ f 1 {3 o5 l. K5 [ if ( hUSBIO( &hDeviceHandle,! p* I6 T4 }+ K$ {4 Z8 Q hCommandBuffer,% D* I$ k9 }% E 30,7 v! N5 R- Q! R* c hWritePipe1, ' l* G [; t5 C( {! o/ I9 X FALSE) == FALSE). ?- T6 s' c" y. R: Z* N* H, k5 ], d, V {: m4 G. V& \5 o printf("can't write datas to RS232\n"); 6 y, K. K# `5 f7 Q( a exit(0); / c2 d2 G3 B7 R5 Q }3 O7 p- C( p$ P, p( a /********* call hDeviceOpen in hwdll.dll to open the board***/ * y7 L5 V7 D) U: k/ M$ y// hCloseDevice 说明: 7 u2 i4 s, b! |// BOOL hCloseDevice(HANDLE *DeviceHandle)0 v& Y$ P7 x" E, g. u: J6 J3 {4 m' h // 作用:关闭设备8 E M9 b+ x- |: ?" { // 参数说明: 8 D8 d9 e& k9 l& c. |// DeviceHandle:设备句柄 / ?0 f0 k+ p, b1 E// 返回值: f6 u4 @( C y, C! U. F, p// 设备关闭成功返回 TRUE,失败则返回FALSE / x! J( B: B; t; K- V if( (hOpen = hCloseDevice( &hDeviceHandle ))==FALSE) 7 D0 v ]8 U; T2 Q5 B, B {6 ?3 U% J' D4 Z. \- d( \- G3 i0 W printf("can't open device\n");/ f7 N" p) ]! F* B, ^/ I printf("press any key to exit\n"); 3 Q) a% Q/ R: |2 u1 [ getch(); }# C5 }" ~! s2 I; A2 X/ c return 0;1 k3 R. e. k" g n8 e( R( I3 N }$ Q, _4 r @; |1 Z/ P0 v else # f4 q" Q- S4 ?7 q7 E% I printf("device closed\n");

printf("press any key to exit the program\n");6 Z& z9 ~0 W f' Z" W2 v: k! z9 J, Z free(hDataBuffer); ( u8 g0 z: u8 b$ M& g/ j3 a free(hCommandBuffer); ; Q G: D; J1 e k4 d2 `* s7 F getch(); 4 y; A( k, N% S. Q7 I4 g5 P" E5 f7 \ return 0;) @1 Q) z% c5 d) }0 f) Y }

; L- l6 ~6 F8 y7 e8 g% E6 q 0 n. Q, |, _0 f* L2 q 4 A9 y% l* Y. a8 o7 Y {/ qTop % g8 {$ @2 h- h2 x$ B 9 j5 R7 V3 g6 O! X 回复人: aiyu33() ( ) 信誉:100 2003-12-17 11:41:24 得分:0 @4 L/ ~! ^! ?0 l& n! I+ o 1 `+ \) r. d# u7 k 1 S3 k: R4 M8 S5 ` , L* B* f/ j4 P! X0 j3 g3 y! b upupupupupupup

$ w% e& z1 Y2 d n% ~ 7 |* O# E" [# z% h( J$ g Top ' h/ C9 e( O/ u: C % M6 e4 L( E- P8 d. K' K: ? 回复人: kingcaiyao(AKing) ( ) 信誉:110 2003-12-17 12:53:39 得分:0 5 e$ t0 r( U; B) |% ~& M 0 ?7 v7 ^& R! f; B1 L, E ) R4 j$ ]: t, w / [7 G# [8 \1 |. U# M你开发的这种软件类似于Palm Desktop Software,负责Pocket与PC之间通讯,我建议你最好先写一个驱动,将USB口虚拟成一个串口,然后直接对串口操作会很方便的。我现在做的程序可能和你相似是一个CDMA模块,通过USB口与PC机连接,然后由驱动程序将它虚拟成一个串口,我的工作就是和这个虚拟的串口通讯。

9 x5 \/ O' W( h& e: u. v5 H 7 M% \% o2 Q6 o) @Top " t: d5 V! ?) d 6 o0 W5 }5 e8 l) D6 \- ]; M* w9 E 回复人: kingcaiyao(AKing) ( ) 信誉:110 2003-12-17 12:56:27 得分:0 5 V6 w) Z4 f+ S$ E - \" b3 a! @5 K* c* l , N. \4 L6 h$ X7 g% T D . R$ z% y9 d! a/ }Pocket与PC连接肯定有驱动的,如果驱动程序没有将Pocket虚拟成一个串口,你也可以直接通过设备GUID和设备序列号进行访问,详情你参见我专栏上的一篇文章。当然了,通过虚拟串口来访问设备肯定要方便,简单些。

! R u R n* }4 M6 X 7 w, G; y, w" Z+ PTop 6 s# U7 M! t% o* s3 Y 0 [: _: D9 |) y# ]' B- l 回复人: aiyu33() ( ) 信誉:100 2003-12-17 13:31:08 得分:0 D" U# B' O5 q 9 D" J# W6 _2 n/ H* W $ U; z8 `( N3 A9 U( T # Y8 L$ L" r4 [; d) Z( z) Y! l我得这款pocketpc默认只支持使用usb与pc相连的,而且activesync3.7就是使用usb传输数据的。如果我自己写驱动的话,不仅不熟悉而且很可能activesync3.7这个软件就使用不了。我只需要利用它的驱动。你的专栏上的那篇文章我也看了,我就是模仿你的写的代码,但就是到createfile这步就不行了,我的同事是用palm开发类似的程序,也是到这步就行不通了,是不是有其他的原因? ! G S( {6 M) W( t3 q" W* e/ [3 X我还想问问如果驱动程序将pocket虚拟成串口,如何查看它的符号名呢?

c* G1 T' ^( K# e3 X0 c2 N 5 C5 h2 z. u: M" _( X" B ; M9 h6 X% T% ?Top 6 [6 {& f1 }, U % Z8 ]* ~+ X6 n/ w. d 回复人: kingcaiyao(AKing) ( ) 信誉:110 2003-12-17 16:53:17 得分:0 R" ~( Z: A, f4 n5 m) M % L6 T9 I) E. q0 z) E , D& {6 X( Q3 r: i) v ' Z; g5 U% |2 W9 c4 x3 E2 y 假如将一个USB设备虚拟成串口的话,那么它的符号名可能是COM3,COM4,或COMn,这根据你当前PC机的配置而定 。它的符号名位于注册表中HKEY_LOCAL_MACHINE\CurrentControlSet中,你可以搜索注册表,另外在2000或以上的操作系统中,你可以到HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SerialComm中看到。

/ L; \0 R6 q& }* ? M7 z+ N 5 T6 D" f0 Z( i# x# {% @4 ~! Z/ I7 ~Top ! B9 }4 d0 D$ B b" n; T/ u9 c G' V0 N9 i1 Z5 d- H. v 回复人: kingcaiyao(AKing) ( ) 信誉:110 2003-12-17 16:55:33 得分:0 9 o q4 A R) `2 c8 s$ l 3 {2 h1 z8 L8 q P1 Z- a5 a7 B- w 8 F& L! C0 y0 s我以前在一张贴子中详细回答了如何利用设备序列号和设备GUID来访问该设备,你可以搜索一下CSDN。你所说的CreateFile不能打通设备,你要查一下,你的符号名是否正确,包括设备序列号和设备GUID是否正确,设备GUID你可以从驱动程序的安装向导文件.inf中找到,设备序列号则需要你到注册表中去找。

% ]: {5 l/ `8 s' ` ' z- S# Y9 n8 l! A) h9 H% lTop 4 G) j" v0 b4 s6 p ! e4 n& I* R. C/ _ k* N$ {7 X- o6 C 回复人: gyj_china(透明) ( ) 信誉:98 2003-12-17 18:15:30 得分:90 ( r1 a5 T4 h$ d1 I5 N5 D / Z) F( s5 o# d* X& R- T+ ? # J- V* D( z7 q* D8 [ 9 M0 z0 E. a( U6 I; m% w. { 没有星星不敢发言:(

2 I2 K* O( X. w4 E 7 K2 d. |& u! v Top - \; R1 ^0 o! q8 ? J! |. N " Y! _$ X. @+ e! R 回复人: aiyu33() ( ) 信誉:100 2003-12-19 18:27:28 得分:0 ) I% J, P. B+ g( p/ s) J7 @ 6 a9 j- N; S4 z( L / f7 j, q3 s3 z- d6 L 1 [' K( t5 j( X$ h/ g7 R不好意思,是因为ActiveSync3.7一直在系统服务程序中运行,占用了驱动程序,所以不能打开设备。我删除了ActiveSync3.7后就可以了。


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

大哥太好了

# \( @2 Q( f, m8 g0 }

正是我想要的

* A& u; ^; s1 C/ h

謝謝你


作者: 闹市的牧羊人    时间: 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
我是刚注册的新手 请各位大哥多关照
7 q% T' _" Y! }4 A0 y. ]
作者: MichaeLonger    时间: 2014-6-18 21:13
路过。。。
作者: MichaeLonger    时间: 2014-6-18 21:13
水水。。。
作者: hitshijian    时间: 2015-2-3 10:25
赞一个!!!
- C8 Z" C7 a1 S$ |4 e1 f; V
作者: SHERE201506    时间: 2015-8-26 11:00
谢谢楼主. _7 U: [& m+ D( d0 A6 _! J- c6 r

作者: SHERE201506    时间: 2015-8-26 11:00
谢谢楼主; Y$ F7 z1 j; q9 y* T- Z) f





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