ÓÃActivexʵÏÖ´®¿ÚͨÐÅ

WIN95 ½ç Ãæ Ï µÄVC++ ´® ¿Ú ͨ Ѷ ³Ì Ðò 

Àû ÓÃWINDOWS ¶¨ ʱ Æ÷ ʵ ÏÖ ´® ¿Ú ͨ ÐÅ ¿Ø ÖÆ 

VC++Ï´®ÐÐͨÐŵıà³Ì·½·¨

´®ÐÐͨѶͨÓýӿڳÌÐòÉè¼Æ

VCÔÚwin95ϱàдÓÃÓÚ´®ÐÐͨѶµÄ³ÌÐò





ÓÃActivexʵÏÖ´®¿ÚͨÐÅ



ΪʵÏÖWindowsµÄ´®¿ÚͨÐÅ¿ÉÓÃAPIʵÏÖ,µ«Ê®·Ö²»±ã¡£Ò²¿ÉÒÔÓÃActive¿Ø¼þʵÏÖ¡£

ÏÈÔÚÓ¦ÓóÌÐòÖвåÈëActive¿Ø¼þMicrosoft comm contronl(MSComm)¡£

SComm¿Ø¼þµÄÊôÐÔ

    MSComm¿Ø¼þµÄÊôÐÔ

        CommPort£ºÉèÖô®¿ÚºÅ£¬ÀàÐÍ short :1-comm1 2-comm2.

        Settings£ºÉèÖô®¿ÚͨѶ²ÎÊý£¬ÀàÐÍ CString :B-²¨ÌØÂÊ P-ÆæÅ¼ÐÔ£

				¨N-ÎÞУÑ飬E-żУÑ飬O-ÆæÑ飩 D-×Ö½ÚÓÐЧλÊýS-ֹͣλ¡£

        PortOpen£ºÉèÖûò·µ»Ø´®¿Ú״̬£¬ÀàÐÍ BOOL£ºTURE-´ò¿ª FALSE-¹Ø±Õ¡£

        InputMode:ÉèÖôӽÓÊÕ»º³åÇø¶ÁÈ¡Êý¾ÝµÄ¸ñʽ£¬ÀàÐÍ long£º 0-Text 1-Bin.

        Input:´Ó½ÓÊÕ»º³åÇø¶ÁÈ¡Êý¾Ý ÀàÐÍ VARIANT¡£

        InBufferCount:½ÓÊÕ»º³åÇøÖеÄ×Ö½ÚÊý£¬ÀàÐÍ£ºshort.

        InBufferSize:½ÓÊÕ»º³åÇøµÄ´óС£¬ÀàÐÍ£ºshort.

        Output:Ïò·¢ËÍ»º³åÇøÐ´ÈëÊý¾Ý£¬ÀàÐÍ£ºVARIANT.

        OutBufferCount:·¢ËÍ»º³åÇøÖеÄ×Ö½ÚÊý£¬ÀàÐÍ£ºshort.

        OutBufferSize:·¢ËÍ»º³åÇøµÄ´óС£¬ÀàÐÍ£ºshort.

        InputLen:ÉèÖûò·µ»ØInput¶Á³öµÄ×Ö½ÚÊý£¬ÀàÐÍ£ºshort.

        CommEvent:´®¿Úʼþ£¬ÀàÐÍ£ºshort.

³ÌÐòʾÀý

    ´®¿Ú³õʼ»¯

        if(!m_comm.GetPortOpen())

            m_comm.SetPortOpen(TURE);        /*´ò¿ª´®¿Ú

        m_comm.SetSettings("4800,n,8,1");  /*´®¿Ú²ÎÊýÉèÖà  

        m_comm.SetInputMode(0);            /*ÉèÖÃTEXT»º³åÇøÊäÈ뷽ʽ

        m_comm.SetRthresHold(1);           /*ÿ½ÓÊÕÒ»¸ö×Ö·ûÔò¼¤·¢OnComm()ʼþ

    ½ÓÊÕÊý¾Ý

        m_comm.SetInputLen(1);               /*ÿ´Î¶Áȡһ¸ö×Ö·û

        VARINAT V1=m_comm.GetInput();        /*¶ÁÈë×Ö·û

        m_V1=V1.bstrval;    

    ·¢ËÍ×Ö·û

         m_comm.SetOutput(COlevariant("Hello");/*·¢ËÍ"Hello"







¡¡

WIN95 ½ç Ãæ Ï µÄVC++ ´® ¿Ú ͨ Ѷ ³Ì Ðò 

ÄÏ ¾© ʯ ÓÍ Îï ̽ ÑÐ ¾¿ Ëù 

Îâ ·ï »ª 

---- Microsoft Visual C++ ÒÔ Æä ½ç Ãæ µÄ ¿ª ·Å ÐÔ Öø ³Æ£¬ Òò Æä ¼ò µ¥ Ò× Ñ§¡¢32 λ 

		Ãæ Ïò ¶Ô Ïó µÄ ³Ì Ðò Éè ¼Æ ¼°Activate X µÄ Áé »î ÐÔ ¶ø ÊÜ ¹ã ´ó ¼Æ Ëã »ú ¿ª 

		·¢ Õß µÄ Çà íù£¬ ¹ã ·º Ó¦ Óà ÓÚ ¸÷ ¸ö Áì Óò¡£ Ôõ Ñù Àû ÓÃVC++ ½ø ÐÐ ´® ¿Ú µÄ

		ͨ Ѷ ±à ³Ì£¬ Õâ ÊÇ Ò» ÖÖ »ù ±¾ ¹¦¡£ ÌØ ±ð ÊÇ ÔÚ Êµ ʱ ¼à ¿Ø¡¢ ´ó С ÐÍ Éè

		±¸ µÄ Õû ¸ö Éú ²ú ¹ý ³Ì ¿Ø ÖÆ µÈ ·½ Ãæ£¬VC++ µÄ ´® ¿Ú ±à ³Ì ÏÔ µÃ ÓÈ Îª ÖØ 

		Òª¡£ ÎÒ Ôø ²Î Óë ±à д ÁË ÎÞ Ïß µç ·Ç ·¨ Ƶ ¶Î Õ¼ Óà µÄ ʵ ʱ ¼à ¿Ø ϵ ͳ¡¢

		 »ì Äý ÍÁ ½Á °è ×Ô ¶¯ »¯ Éú ²ú ¿Ø ÖÆ ϵ ͳ¡£ ÏÂ Ãæ ¾Í ×Ô ¼º µÄ Ò» µã ¾­ Ñé

		  Ìå »á Óë ¶Á Õß ·Ö Ïí¡£ 



---- Ò» °ã Çé ¿ö Ï µÄ ´® ¿Ú ͨ Ѷ ÎÞ ·Ç ²É Óà Á½ ÖÖ ·½ ·¨£º Ò» ÊÇ Àû ÓÃWindows µÄ ͨ 

ѶAPI º¯ Êý£¬ ¶þ ÊÇ Àû ÓÃVC++£¨ »ò Æä Ëü Óï ÑÔ£© µÄ ±ê ×¼ ͨ Ѷ º¯ Êý_inp¡¢_outp À´ ʵ ÏÖ¡£ 



---- Windows µÄAPI º¯ Êý Ëä È» ʹ ÓÃ Ãæ ºÜ ¹ã£¬ µ« ÓÉ ÓÚ ±È ½Ï ¸´ ÔÓ ¶ø ÓÐ Ò» ¶¨ µÄ ÄÑ 

¶È£¬ ¹Ê ¼ò µ¥ Êö Ö®£¬ Æä ±à ³Ì ¹ý ³Ì ·Ö Ϊ ³õ ʼ »¯ ´® ¿Ú¡¢ Åä Öà ´® ¿Ú¡¢ ³¬ ʱ ¿Ø ÖÆ¡¢

 Êý ¾Ý ´« Êä¡¢ ¹Ø ±Õ ´® ¿Ú µÈ¡£ 



---- VC++ ´® ¿Ú ͨ Ѷ 



---- Ò»¡¢ ³õ ʼ »¯ ´® ÐРͨ Ѷ ¿Ú 



---- ͨ ¹ý ¼Æ Ëã »ú ´® ¿Ú ½ø ÐРͨ Ѷ Ö® ǰ£¬ ±Ø Ðë ¸ù ¾Ý ¼à ¿Ø Éè ±¸ µÄ ÓÐ ¹Ø ͨ Ѷ ²Î 

Êý£¬ Ô¼ ¶¨ Ë« ·½ µÄ ͨ Ѷ ·½ ʽ£¬ °ü À¨ ²¨ ÌØ ÂÊ µÄ Éè Öá¢ Ææ ż λ У Ñé ¼° Í£ Ö¹ λ µÄ

 Éè Á¢¡£ È· ¶¨ Êý ¾Ý ´« Êä Ö¡ ¸ñ ʽ£¬ È· ¶¨UART ²Ù ×÷ ·½ ʽ¡£ Öð ¸ö ¶Ô Ïß Â· ¿Ø ÖÆ ¼Ä ´æ 

 Æ÷¡¢ ²¨ ÌØ ÂÊ Òò ×Ó ¼Ä ´æ Æ÷ ºÍM0DEM ¼Ä ´æ Æ÷ д Èë ²Ù ×÷¡£ 



---- ÏÈ È· ¶¨ ¼Æ Ëã »ú µÄ ͨ Ѷ ¿Ú µØ Ö· ÊÇ3F8 »¹ ÊÇ2F8£¨ ¸ù ¾Ý Óà »§ µÄ ²» ͬ Òª Çó£¬ ¿É 

¼Ó ²å ¿¨ ¶ø ÓÐ3E8¡¢2E8£¬ Éõ ÖÁ ʹ Óà ¶à Óà »§ ¿¨ ¶ø ÓÐ3220¡¢3228¡¢4220¡¢4228¡¢5220¡¢5228£©

£¬ Àý ÖÐ ÒÔ2F8 ×ö Ϊ ¶Ë ¿Ú µØ Ö·¡£ Àû ÓÃ_outp(PORT,0x0c) ½« ²¨ ÌØ ÂÊ Éè Öà Ϊ9600£¬£¨_outp

(PORT,0x30) ½« ²¨ ÌØ ÂÊ Éè Öà Ϊ2400£¬_outp(PORT,0x18) ½« ²¨ ÌØ ÂÊ Éè Öà Ϊ4800£©¡£ 



---- Êý ¾Ý ´« Êä ¸ñ ʽ Ôò ÓÉ µØ Ö·PORT+3 È· ¶¨£¬ Èç Ñ¡ Óà Æß λ Ò» Í£ Ö¹ λ ż У Ñ飬 Ôò

 ²É ÓÃoutp(PORT+3,0x3a) ¼°outp(PORT+3 ,0x1a) Á½ ¸ö Óï ¾ä£» Èç Ñ¡ Óà °Ë λ Ò» Í£ Ö¹ λ ÎÞ 

 Ææ ż У Ñ飬 Ôò ²É ÓÃoutp(PORT+3,0x3a) ¼°outp(PORT+3 ,0x03) Á½ ¸ö Óï ¾ä£» ÖÁ ÓÚ Îª ʲ ô

 £¬ ¿É ²Î ¿¼ ÓÐ ¹Ø Òì ²½ ͨ Ѷ Êý ¾Ý ¸ñ ʽ ·½ Ãæ µÄ Êé¡£ 



---- ¶þ¡¢ ²é ѯ ·¢ ËÍ Á÷ ³Ì 



---- Ö» ÐèCPU ¼ì ²â µ½UART ·¢ ËÍ Æ÷ ±£ ³Ö ¼Ä ´æ Æ÷ Ϊ ¿Õ£¬ ¼´ ÏòUART Êä ³ö Ò» ¸ö ×Ö ·û¡£ ·¢ 

ËÍ ·½ Ê× ÏÈ Êä ³öRTS ºÍDTR ÓРЧ£¬ ¼ì ²âMODEM ¼Ä ´æ Æ÷£¬ Ö» ÓÐ ÊÕ µ½DEC Êä Èë µÄCTS¡¢DSR ÓÐ

 Ч£¬CPU ²Å ÏòUART Êä ³ö Ò» ·¢ ËÍ ×Ö ·û¡£ 



---- Èý¡¢ ²é ѯ ½Ó ÊÕ Á÷ ³Ì 



---- Ö» ÐèCPU ¼ì ²â µ½UART ½Ó ÊÕ Æ÷ Êý ¾Ý ×¼ ±¸ ¾Í Ð÷£¬ ¼´ ¿É ´Ó ½Ó ÊÕ Æ÷ Êý ¾Ý ¼Ä ´æ Æ÷ ÖÐ 

¶Á È¡ Ò» ×Ö ·û¡£ ½Ó ÊÕ ·½ Ê× ÏÈ Êä ³ö Êý ¾Ý ÖÕ ¶Ë ¾Í Ð÷ ÓРЧ£¨DTR=1£©£¬ È» ºó ¼ì ²âMODEM ×´

 ̬ ¼Ä ´æ Æ÷£¬ Ö» ÓÐDSR=1£¬CPU ²Å ½Ó ÊÕ Ò» ×Ö ·û¡£ 



---- ³Ì Ðò Àý 



---- Ϊ ÁË ±à ³Ì µÄ ·½ ±ã£¬ ÎÒ °Ñ ʵ ʱ ¼à ¿Ø ¹ý ³Ì ÖÐ µÄ ´® ¿Ú ³õ ʼ »¯¡¢ ´® ¿Ú ½Ó ÊÕ¡¢ ´® 

¿Ú ·¢ ËÍ µÈ ÒÔ ×Ó ³Ì Ðò µÄ ÐΠʽ ³Ê ÏÖ¡£ 



 È· ¶¨ ͨ Ѷ ¿Ú µØ Ö·£ºint PORT=0x2F8;

 ½Ó ÊÕ ×Ö ·û ×Ó ³Ì Ðò£º

char near readbyte(void)

  {

    int time_limit;

    char sta;

    time_limit=5000;

    while ((sta=inp(PORT+5) & 0x01) !=1)

      { time_limit--;

        if (time_limit==0) {

        /*printf("s=%4xm ",sta);*/return 0;}

      }

    return inp(PORT);

   printf("%s",inp(PORT));

  }



 ·¢ ËÍ ×Ö ·û ×Ó ³Ì Ðò£º

void sendbyte(unsigned char sdata)

  {

    long int time_limit;

    time_limit=50000;

    while ((inp(PORT+5) & 0xf0) != 0x60)

      { time_limit--;

       if (time_limit==0) break;

      }

    outp(PORT,sdata);

  }



 ´® ¿Ú ³õ ʼ »¯ ×Ó ³Ì Ðò£º

void init_com(PORT)

  {

    char i;

    outp(PORT+3,0x80);

    outp(PORT  ,0x0C); /* baud rate 9600 */

    outp(PORT+1,0);

  /*8bit 1stop no even */

    outp(PORT+3 ,0x3a);

outp(PORT+3 ,0x03); 

i=inp(PORT+5) & 0xfe;   

outp(PORT+5,i);

  }



 ×Ö ·û ´® ·¢ ËÍ ×Ó ³Ì Ðò£º

void sendstrn(char *mess)

  {

    for (; *mess; mess++)

      sendbyte(*mess);

      sendbyte(0X0D);

  /*sendbyte(0X0A); */

 }



 ¼ò µ¥ µÄ Ö÷ ³Ì Ðò£º

init_com(ox2f8);

sendstrn(PORT,"FUNC");

j=0;

line=0;

do {

  for(i=0;i<25;i++) ttemp[i]="\0" ; if(readbyte(PORT)="='M')" { i="0;" do { ttemp[i]="readbyte(PORT);" i++; }

  while((ttemp[i-2]!="13)&&(ttemp[i-1]!=10));" line++; dcqd.TextOut(450,line*20+180,ttemp);} j++;}

   while((j< 1000)&&(line< 5)); Wed, 16 Sep 1998 "acejet" < cejet@public1.ptt.js.cn>



Àû ÓÃWINDOWS ¶¨ ʱ Æ÷ ʵ ÏÖ ´® ¿Ú ͨ ÐÅ ¿Ø ÖÆ 

---- 1£º ´® ¿Ú ͨ ÐÅ ¸Å Êö 



---- ÔÚ ¼Æ Ëã »ú Íâ Éè ÖУ¬RS-232 ´® ¿Ú Òò Ϊ Æä ×é ³É ·½ ʽ ¼ò µ¥£¬ ±à ³Ì ¿Ø ÖÆ ·½ ±ã ¶ø ³É Ϊ ×î Ϊ Ó¦ Óà 

¹ã ·º µÄI/O ͨ µÀ Ö® Ò»¡£ ÔÚ Ó² ¼þ Á¬ ½Ó ·½ Ãæ£¬ ×î Ϊ ¼ò µ¥ µÄ ·½ ʽ Ò» Ìõ ¹« Óà µØ Ïß ºÍ Á½ Ìõ ÐÅ ºÅ Ïß ¼´ 

¿É ×é ³É ´® ÐÐ Ë« ¹¤ ͨ ÐÅ Ïß Â·¡£ ¶ø ÔÚ Èí ¼þ ±à ³Ì ¿Ø ÖÆ ·½ Ãæ£¬ ²Ù ×÷ ϵ ͳ Òà Ìá ¹© ÁË ¶Ô Ó¦ µÄ ±à ³Ì ½Ó 

¿Ú£¬ ʹ µÄ ¿ª ·¢ Õß ÄÜ Áé »î µÄ ¿Ø ÖÆ ´® ¿Ú ¹¤ ×÷¡£ 



---- ÔÚDOS µÄ ϵ ͳ ½Ó ¿Ú ÖÐDOS INT21H µÄ03H ºÍ04H ºÅ ¹¦ ÄÜ µ÷ Óà Ϊ Òì ²½ ´® ÐРͨ ÐÅ µÄ ½Ó ÊÕ ºÍ ·¢ ËÍ ¹¦ 

ÄÜ£¬ ¶øBIOS INT14H ÓÐ4 ×é ¹¦ ÄÜ µ÷ Óà Ϊ ´® ÐРͨ ÐÅ ·þ Îñ£¬ Õý Òò Ϊ Èç ´Ë ÔÚDOS ÖÐ ²É Óà ¼Ä ´æ Æ÷ Ö± ½Ó ¶Á

 д¡¢BIOS µ÷ Óᢠͨ ÐÅ ÖÐ ¶Ï ³Ì Ðò µÈ ·½ ·¨ ¿É ÒÔ ±È ½Ï ÈÝ Ò× Êµ ÏÖ ´® ¿Ú ͨ ÐÅ¡£ µ« ÊÇ ÔÚWINDOWS ÖÐ ÓÉ ÓÚ

 WINDOWS ²É Óà Ïû Ï¢ Çý ¶¯ ºÍ Éè ±¸ ͳ Ò» ¹Ü Àí£¬ ÒÔ ¼° Àû Óà Ïû Ï¢ ¶Ô ÁÐ ½ø ÐÐ ³Ì Ðò ¿Ø ÖÆ£¬ Ëù ÒÔDOS Ï µÄ

  ·½ ·¨ ¶¼ ²» ÒË ²É ÓÃ. ÔÚWINDOWS ÖРΪ ʵ ÏÖ ´® ¿Ú ͨ ÐÅ£¬WINDOWS µÄSDK Ìá ¹© ÁË Íê ±¸ µÄAPI º¯ Êý ºÍ ÒÔ ÖÐ

   ¶Ï ·½ ʽ Çý ¶¯ µÄ ͨ ÐÅ Çý ¶¯ ³Ì Ðò£¬ ʹ ±à ³Ì ±ä µÄ ½Ï Ϊ ÈÝ Òס£ 



---- WINDOWS Ìá ¹© µÄ ±ê ×¼ ͨ ÐÅAPI º¯ Êý ºÜ ¶à(win16 ºÍwin32 ÖÐ ÓÐ Ëù ²» ͬ)£¬ Ò» °ã À´ ˵ ³£ Óà µÄ ÓУº 



win16	 	win32 	 ×÷ÓÃ

OpenComm CreateFile £¨´ò¿ªÍ¨Ðſڣ©£»

BuildCommDCB BuildCommDCB £¨Ìî³äDCBÊý¾Ý½á¹¹£©£»

SetCommState SetCommStae £¨ÉèÖÃͨÐÅ¿Ú״̬£©£»

FlushComm PurgeComm £¨Çå³ýͨÐŽÓÊÕ»ò·¢ËÍ»º³åÇø£©£»

GetCommError   ClearCommError

£¨»Ö¸´»òÈ¡µÃͨÐſڵÄ״̬£©£»

ReadComm ReadFile £¨´ÓͨÐŽÓÊÕ»º³åÇø¶Á×Ö·û£©£»

WriteComm WriteFile £¨ÏòͨÐÅ·¢ËÍ»º³åÇøÐ´×Ö·û£©£»

CloseComm CloseHandle £¨¹Ø±ÕͨÐſڣ©£»



---- ÔÚwin16 ÖРͨ ÐÅ Éè ±¸ ÓÉ ×¨ Êͨ ÐÅ º¯ Êý ´¦ Àí£¬ ¶øwn32 ÖÐ ½« Õâ Щ Éè ±¸ µ± ×÷ Ãæ Ïò ÎÄ ¼þ µÄ Éè ±¸ À´ ´¦ Àí¡£ 



---- 2:WINDOWS ¶¨ ʱ Æ÷ 



---- WINDOWS ϵ ͳ ÖУ¬ ³ý ¼ü ÅÌ ºÍ Êó ±ê Í⣬ ¶¨ ʱ Æ÷ Òà ÊÇ Ò» ÖÖ Êä Èë Éè ±¸£¬ ʹ Óà ¶¨ ʱ Æ÷ µÄ ·½ ·¨ ±È ½Ï ¼ò 

µ¥£¬ ͨ ³£ ¸æ ËßWINDOWS Ò» ¸ö ʱ ¼ä ¼ä ¸ô£¬ È» ºóWINDOWS ÒÔ ´Ë ʱ ¼ä ¼ä ¸ô ÖÜ ÆÚ ÐÔ ´¥ ·¢ ³Ì Ðò¡£ 



---- WINDOWS µÄWM_ TIMER Ïû Ï¢ ÓëBIOS µÄ08H¡¢1CH ²» ͬ£¬ ´« ͳ µÄPC פ Áô ³Ì Ðò µØ ½Ó ÊÕ µ½08H ÖÐ ¶Ï ºÍ1CH ÖÐ ¶Ï£¬ 

¶øWINDOWS Ó¦ Óà ³Ì Ðò ¿É ÒÔ ÖÜ ÆÚ ½Ó ÊÕ µ½WM_TIMER Ïû Ï¢£¬ Õâ Á½ Õß µÀ Àí ²» Ò» Ñù. ÔÚWINDOWS ÖУ¬ ÓÐSYSTEM.DRV ´¦ 

Àí Ó² ¼þ ¶¨ ʱ ÖÐ ¶Ï£¬WINDOWS Ó¦ Óà ³Ì Ðò ´Ó Ïû Ï¢ ¶Ó ÁÐ ÖÐ »ñ µÃWM_TIMER Ïû Ï¢ ¶ø ²» »á ÊÕ µ½08H Ó² ¼þ ÖÐ ¶Ï£¬WM_TIMER

 Ïû Ï¢ ²¢ ²» ÊÇ Ëæ ʱ' ²å Èë' Ó¦ Óà ³Ì Ðò£¬ ¶ø ÊÇ Ó¦ Óà ³Ì Ðò Ö÷ ¶¯ µØ¡¢ ÓÐ ´Î Ðò µÄ ´Ó Ïû Ï¢ ¶Ó ÁÐ ÖÐ µÃ µ½ ʱ ¼ä Ïû Ï¢¡£

  ¶øDOS ÖÐ ÓÉ ¼Æ Ëã »ú ÿ ¸ô18.2s ²ú Éú08H ÖÐ ¶Ï£¬08H ÖÐ ¶Ï ÔÙ µ÷ ÓÃ1CH ÖÐ ¶Ï£¬ Ó² ¼þ ÖÐ ¶Ï ÓÐ Ò» ÖØ Òª ÌØ Õ÷£¬ ¼´ ·¢ 

  Éú µÄ ʱ ¼ä ÊÇ ÔÚ ÈÎ ºÎ ʱ ¿Ì£¬ ²» ¹Ü ³Ì Ðò ÔË ÐÐ µ½ ÈÎ ºÎ ʱ ¿Ì£¬ Ó² ¼þ ÖÐ ¶Ï ¶¼ ¿É ÒÔ ²å Èë ³Ì Ðò¡£ 



---- 3:WINDOWS ÖÐ Àû Óà ¶¨ ʱ Æ÷ ¿Ø ÖÆ ´® ¿Ú ͨ ÐÅ 



---- ÔÚWINDOWS ÖÐ ÓÉ ´® ¿Ú ½ø À´ µÄ Êý ¾Ý ¾­ ¹ý Á½ ¸ö »º ³å Çø£¬ Ê× ÏÈ ÊÇ Ó² ¼þ µÄ ½Ó ÊÕ »º ³å Çø( Õâ ÖÖ »º ³å ͨ ³£

ÓÐ8 λ »ò16 λ)£¬ È» ºó ½ø Èë Ó¦ Óà ³Ì Ðò Éè Öà µÄ ´® ¿Ú ½Ó ÊÕ »º ³å£¨ Õâ ¸ö »º ³å ´ó С ÔÚWIN16 ÖÐ ÓÉ Ó¦ Óà ³Ì Ðò Éè

 Ö㬠¶øWIN32 ÖÐ ÓÉ ÓÚ ´® ¿Ú ×÷ Ϊ Ãæ Ïò ÎÄ ¼þ Éè ±¸ ´¦ Àí£¬ Ëù ÒÔ »º ³å ´ó С ²» Óà Éè Öã©£¬ Êý ¾Ý ´Ó Ó² ¼þ »º ³å µ½

  Ó¦ Óà ³Ì Ðò »º ³å Õâ Ò» ¹ý ³Ì ÓÉWINDOWS ±¾ Éí Íê ³É£¬ ×÷ Ϊ ±à ³Ì Õß ²» Óà ¿¼ ÂÇ Ëü£¬ Ó¦ Óà ³Ì Ðò Ö» ¹Ø ÐÄ ºÎ ʱ ÓÐ 

  Êý ¾Ý¡£ Ëä È»WINDOWS Ìá ¹©WM_COMMNOTIFY Ïû Ï¢£¬ µ« ÊÇ ±Ê Õß ÔÚ Ê¹ Óà ÖÐ ·¢ ÏÖ Àû Óà Ëü ¿Ø ÖÆ ±È ½Ï Âé ·³£¬ ¶ø ÇÒ ¾­ 

  ³£ ·¢ Éú ¶ª ʧ Êý ¾Ý ÏÖ Ïó£¬ ¶ø Àû Óà ¶¨ ʱ Æ÷ ´¦ Àí Ôò ¿É ´ï µ½ ¿Ø ÖÆ Áé »î µÄ Ð§ ¹û¡£ 



---- ÔÚ ³Ì Ðò ³õ ʼ »¯ ´® ¿Ú ÒÔ ºó£¬ ÔÚ ³Ì Ðò ÖРΪ ´® ¿Ú Éè Á¢ Ò» ¸ö ¶¨ ʱ Æ÷£¬ Àû Óà ¸Ã ¶¨ ʱ Æ÷ ¶¨ ʱ ¼ì ²é ´® ¿Ú 

×´ ̬£¬ Èç ¹û ÓÐ Êý ¾Ý Ôò ¿ª ʼ ½Ó ÊÕ ´¦ Àí£¬ ·ñ Ôò ¸Ã ¶¨ ʱ Æ÷ Ïû Ï¢ ÎÞ ´¦ Àí¡£ Ò² Ðí ÓÐ ÈË ÈÏ Îª ÓÐ ÔÚ Êý ¾Ý ´¦ Àí 

δ ½á Êø ʱ Ï һ ¸ö ¶¨ ʱ Æ÷ Ïû Ï¢ »á ·¢ Éú µÄ ÏÖ Ïó£¬ ¶Ô ÓÚ Õâ ÖÖ Çé ¿ö ³ý ÁË ¼Ó ´ó ¶¨ ʱ Æ÷ ¼ä ¸ô Íâ ¸ü Ϊ Ö÷ ¶¯ µÄ

 °ì ·¨ ÊÇ ÔÚ ·¢ ÏÖ ÓÐ Êý ¾Ý ʱ ¹Ø ±Õ ¶¨ ʱ Æ÷£¬ È» ºó ÔÚ Êý ¾Ý ½Ó ÊÕ Íê ºó ÔÚ ´ò ¿ª¡£ 



---- 4.WINDOWS ͨ Њʵ Àý 



---- ͨ Њʵ Àý µÄ »· ¾³ Ϊ£º586/100 ¼Æ Ëã »ú£» ÖÐ ÎÄWINDOWS`95£» ¶Ô ·½ Ϊ ½» »» »ú¡£ ͨ ÐÅ ²Î Êý Ϊ£º ²¨ ÌØ ÂÊ9600bps;

 Êý ¾Ý λ8 λ£» Í£ Ö¹ λ1£» ÎÞ Ð£ Ñé¡£ ͨ ÐŠЭ Ò飺 Ö¡ ¿ª ʼ ºÍ ½á Êø ¶¼ Ϊ0X7E0X7E£¬ Ö¡ Êý ¾Ý ²» ¶¨ ³¤¡£ 



±à³Ì»·¾³£ºBORLANDC C++5.0,WINDOWS `95 

//======================================

// FUNCTION: short InitCom()

// PURPOSE:  init com1

// RETURN VALUE:

//    1-------No error

//    0-------init Error

//======================================

short InitCom()

 {





 if(com_select==1)

 {

 IDCommDevice=CreateFile("COM1",

 GENERIC_READ|GENERIC_WRITE,

	0,NULL,OPEN_EXISTING,0,NULL);

 if(IDCommDevice==INVALID_HANDLE_VALUE)

	 {

	 MessageBox(hWnd,"OPenComm error","info",MB_OK);

	 CloseHandle(IDCommDevice);

	 return 0;

	 }

	 BuildCommDCB("COM1:9600,N,8,1",&dCB);

 	 }else

	 {

   IDCommDevice=CreateFile("COM2",

         GENERIC_READ|GENERIC_WRITE,

    	 0,NULL,OPEN_EXISTING,0,NULL);

 	if(IDCommDevice==INVALID_HANDLE_VALUE)

  {

  MessageBox(hWnd,"OPenComm error","info",MB_OK);

  CloseHandle(IDCommDevice);

  return 0;

  }

 BuildCommDCB("COM2:9600,N,8,1",&dCB);

	 }



	if (SetCommState(IDCommDevice,&dCB)<0) { MessageBox(hWnd,"Read SET CommState error","info",MB_OK); 

	CloseHandle(IDCommDevice); return 0; } if(!PurgeComm(IDCommDevice,PURGE_RXCLEAR)) 

	{ MessageBox(hWnd,"IN buffer flush error","info",MB_OK); CloseHandle(IDCommDevice); return 0; } 

	if(!PurgeComm(IDCommDevice,PURGE_TXCLEAR)) { MessageBox(hWnd,"OUT buffer flush error","info",MB_OK); 

	CloseHandle(IDCommDevice); return 0; } return 1; } . . . . 

	/****************************************** Function:JKTWndProc(HWND hDlg,UINT message, WPARAM wParam,LPARAM lParam)

	 Purpose: ´¦Àí½»»»»úµÄÐÅÏ¢ Message: WM_INITDIALOG---¶Ô»°¿ò³õ»¯ WM_COMMAND------ËùÓжԴ°¿ÚµÄ²Ù×÷ 

	 **********************************************/

	  #pragma argsused LRESULT CALLBACK JKTWndProc(HWND hDlg, UINT message, UINT wParam, LONG lParam) {

	   LPDWORD num; short sign; char *temp_char; short x; BOOL lresult; int t_com; hdlg="hDlg;" switch (message) 

	   { case WM_TIMER: switch(LOWORD(wParam)) { case TIMER_REC: ClearCommError(IDCommDevice, &lpErrors,&ComStat); 

	   if(ComStat.cbInQue!="0)" PostMessage(hDlg,WM_COMMAND ,IDP_DEALDATA,0L); break; } return 0;

	    case WM_COMMAND: switch(LOWORD(wParam)) { case IDP_DEALDATA: //´¦Àí½»»»»ú·¢µÄÐÅÏ¢

		 for(t_com="0;t_com<" ComStat.cbInQue;t_com++) 

		 { num="0;" l result="ReadFile(IDCommDevice£¬" temp_char,1,&n um,&lpOverlapped); temp_char++; }

		  return 0; case IDBEGIN: //¿ªÊ¼¹¤×÷ sign="InitCom(hDlg);" if(sign="=0)"

		   { MessageBox(hDlg,"´®¿ÚÉèÖÃʧ°Ü!","Information",MB_OK); return 0; } 

		   i SetTimer(hDlg,TIMER_REC,20,NULL); return 0; } break; } return (0); } . . . . . 



---- ÓÉ ÓÚ Æª ·ù ÓÐ ÏÞ£¬ Ö» ¸ø ³ö ³Ì Ðò µÄ С ²¿ ·Ö£¬ ÓÉ ÓÚ Ë® ƽ ÓÐ ÏÞ£¬ ÓÐ Ëù ʧ Îó µÄ µØ ·½ Çë ¶à ¶à Ö¸ Õý¡£ 

 



--------------------------------------------------------------------------------



¡¡

VC++Ï´®ÐÐͨÐŵıà³Ì·½·¨



ÕÅ¡¡Á¦¡¡ÂÀÕñËà¡¡ÕÔÇìÁÖ



1¡¡ÒýÑÔ



¡¡¡¡´®ÐÐͨÐųÌÐòÊÇ΢»ú¼à¿ØÈí¼þÖлù´¡¡¢¹Ø¼üµÄÒ»¸ö»·½Ú£¬ÈçºÎÓÐЧµØ¿ª·¢Í¨ÐųÌÐò£¬ÊÇÈí¼þ¿ª·¢ÈËÔ±Ëù¹ØÐĵϰÌâ¡£

Microsoft¹«Ë¾´Ó1993ÄêÍÆ³öVC++1.0¿ªÊ¼£¬²»¶ÏÉý¼¶,´Ó VC++1.52µ½Ä¿Ç°×îÐ嵀 VC++5.0£¬ÓµÓдóÁ¿µÄÓû§£¬ÓÃVC++¿ª·¢

´®ÐÐͨÐųÌÐòÒ²Ëæ°æ±¾µÄ²»Í¬¸÷ÓÐÌØµã¡£±¾ÎÄÏêϸµØ½éÉÜÁËÓÃVC±àдͨÐųÌÐòµÄÁ½ÖÖ·½·¨£º

¡¡¡¡. ÓÃAPI£¨Application Programm InterfaceÓû§³ÌÐò½Ó¿Ú£©º¯Êý£»

¡¡¡¡. ÓÃOLE£¨Object Linking and Embedding¶ÔÏóÁ´½ÓÓëǶÈ룩¿Ø¼þ¡£



2¡¡ÓÃAPIº¯ÊýʵÏÖ´®ÐÐͨÐÅ



¡¡¡¡APIº¯ÊýÊÇWindows³ÌÐò¿ª·¢Ê¹ÓõÄÖ÷Òªº¯Êý¼¯£¬ÆäÖÐÌṩÁËÊ®¼¸¸öרÃŵÄͨÐź¯Êý¡£¶ÔÓ¦Windows3.xºÍWin95¼° NT¿ª·¢

»·¾³£¬ÓÐ16λºÍ32λͨÐÅAPIº¯Êý£¬VC++ 2.0ºÍÒÔǰµÄ°æ±¾¶¼±£³Ö16λºÍ32λÁ½¸ö°æ±¾£¬´Ó VC++4.0 ÒÔºó£¬Èí¼þÖ»Ö§³Ö32λ

Ó¦ÓóÌÐòµÄ¿ª·¢¡£Ä¿Ç°½Ï¶àµÄÓ¦ÓÃÊÇÔÚWin95¼°NTµÄ32λ¿ª·¢»·¾³Ï£¬µ«Ò²´æÔÚ×ÅWindows3.xÏ¿ª·¢µÄ16λͨÐųÌÐòÏò32λ³Ì

ÐòµÄÒÆÖ²ÎÊÌâ¡£»ùÓÚÕâÖÖ¿¼ÂÇ£¬16λͨÐź¯ÊýÒ²ÁоٳöÀ´¡£



2.1¡¡Ö÷ҪͨÐź¯ÊýµÄ¶Ô±È



¡¡¡¡32λͨÐź¯ÊýÓë16λº¯ÊýµÄÖ÷񻂿±ðÔÚÓÚ£¬32λAPIº¯Êý°Ñ¶ÔͨÐſڵIJÙ×÷µ±×÷Ò»¸öÆÕͨÎļþ¡£ÕâÊÇÒòΪÔÚWindows95ºÍNT

Ï£¬WM-COMMNOTIFYÏûÏ¢Òѱ»È¡Ïû£¬²Ù×÷ϵͳÒѽ«Í¨ÐÅÉ豸·â×°ÆðÀ´ÁË£¬ÏµÍ³ÎªÃ¿¸öͨÐÅÉ豸¶¨ÒåÁËÓû§¿É¶¨Òå´óСµÄ¶Á/д»º

³åÇø£¬Ó¦ÓóÌÐòÖ»¶Ô¶Á/д»º³åÇø²Ù×÷£¬¶ø²»ÓúÍͨÐÅÇý¶¯³ÌÐò´ò½»µÀ¡£

¹¦ÄÜÃèÊö16λº¯Êý¸Ä½øµÄ32λº¯Êý´ò¿ªÍ¨ÐÅ×ÊÔ´OpenCommCreatFile¹Ø±ÕͨÐÅ×ÊÔ´CloseCommCloseHandle¶ÁͨÐÅ»º³åÇøReadCommReadFile

дͨÐÅ»º³åÇøWriteCommWriteFileÉèÖÃͨÐÅʼþSetCommEventSetCommMaskͨÐÅ´íÎó¼ì²éGetCommErrorClearCommError



2.2¡¡ÓÃAPIº¯Êý±à³ÌµÄ¹ý³Ì



¡¡¡¡Ê×ÏÈÓÉÓ¦ÓÃÏòµ¼£¨AppWizard£©Éú³É³ÌÐòµÄÖ÷¿ò¼Ü¡£ÔÚ¼¯³É¿ª·¢»·¾³ÏÂÑ¡File/New²Ëµ¥(ÒÔVC5.0ΪÀý)£¬µ¯³öNew¶Ô»°¿ò£¬µ¥»÷project

±êÇ©ºóÑ¡MFC AppWizard (exe)Ïî,ÔÚ´´½¨µÄµÚÒ»²½Ñ¡Öе¥Îĵµ£¬ÆäËûÎå²½½ÓÊÜȱʡѡÏֻÐè±à¼­Éú³ÉµÄÊÓÀà.cppÎļþ¼´¿É¡£¿ÉÒÔÓÃÁ½ÖÖ

·½·¨±à³Ì£ºÒ»ÖÖÊÇÀûÓÃWindowsµÄ WM-COMMNOTIFYÏûÏ¢£¬Ó³Éä³ö¸ÃÏûÏ¢µÄ´¦Àíº¯Êý£¬Í¨ÐűàÂë¾Í·ÅÔڸú¯ÊýÖУ¬ÕâÖ÷ÒªÊÊÓÃÓÚVC2.0¼°ÒÔǰ

µÄ°æ±¾ £»ÁíÒ»ÖÖ·½·¨ÊÇÖ±½ÓÔÚ.CPPÎļþÖбàдͨÐŲ¿·Ö£¬°ÑͨÐŵ±×÷ÊÓÀàµÄ³ÉÔ±º¯Êý¡£²»ÂÛÓÃÄÄÖÖ·½·¨£¬±à³Ì˼·ÊÇÏàͬµÄ£ºÉèÖóõʼ

»¯²¢´ò¿ª´®¿Ú-ÅäÖô®¿Ú-ÔÚË«·½¼ä´«ÊäÊý¾Ý£¬²¢½øÐÐУÑéµÈ´¦Àí-²»ÐèҪʱÊÍ·Å´®¿Ú£¬¹©ÆäËû³ÌÐòʹÓá£



2.3¡¡×¢ÒâÊÂÏî



¡¡¡¡ÔÚWindows 3.x ÖУ¬ÓÐרÃŵÄÏûÏ¢WM-COMMNOTIFYÓÃÓÚͨÐÅ¡£ÔÚWindows95ºÍNTÏ£¬¸ÃÏûÏ¢Òѱ»È¡Ïû£¬µ«Óû§Ò²¿ÉÒÔÓÃ×Ô¶¨ÒåµÄ

WM-COMMNOTIFYÏûÏ¢£¬ÕâʱҪעÒâÏûÏ¢Ó³ÉäµÄÉùÃ÷±ØÐëÈçÏ£º

¡¡¡¡ON-MESSAGE (WM-COMMNOTIFY,memberFxn); ÆäÖÐmemberFxnÊǸÃÏûÏ¢µÄ´¦Àíº¯ÊýÃû¡£

¡¡¡¡Win95ÖÐÐÂÔöÁË»ùÓÚÏ̵߳ĶàÈÎÎñ£¬µ±Ó¦ÓóÌÐòÏ£Íû½öÔÚͨÐÅÉ豸ÓÐÊý¾Ý³öÏÖʱ²Å¶ÔÆä²Ù×÷£¬Ó¦´´½¨Ïß³ÌÀ´¼àÊÓͨÐÅÉ豸¡£¿¼ÂÇ

µ½Í¨ÐŽϷÑʱ£¬½¨ÒéʹÓöàÏß³ÌÀ´¹ÜÀíͨÐÅ£¬ÈÃͨÐÅÔÚºǫ́Íê³É¡£ÔÚVC++µÄ MFC£¨Microsoft Foundation Classes ΢Èí»ù´¡Àà¿â£©

ÖÐÌṩÁËרÃŹÜÀíÏ̵߳ÄÀà CwinThread,ͬʱVC++»¹ÌṩÁËһЩÓëÏß³ÌÓйصÄÈ«¾Öº¯Êý£¬ÈçAfxBeginThreadµÈ¡£¶àÏß³ÌÖÐ×ÊÔ´¹²Ïí

ʱ£¬±ØÐë½èÖúһЩWin32ͬ²½º¯ÊýÀ´Ð­µ÷Ï̵߳Ļ£¬±ÜÃâ³åÍ»¡£VCµÄMFCÒ²ÌṩÁ˼¸¸öÓëͬ²½ÓйصÄÀà,ÈçCSyncObject¡¢CMutex¡¢

CSemaphore¡¢CeventµÈ¡£ÔÚÊÓÀàµÄ.cppÎļþÏ¿ɴ´½¨Í¨ÐÅỊ̈߳¬²¢¸ù¾Ýʵ¼ÊÐèҪȷ¶¨Ï̵߳ÄÓÅÏȼ¶£¬ºÏÀíµ÷Óà APIº¯ÊýÒÔʵÏÖͨÐÅ¡£



3¡¡ÓÃOLEͨÐſؼþʵÏÖ´®ÐÐͨÐÅ



¡¡¡¡ÓÃVC++µÄOLE¿Ø¼þʵÏÖ´®ÐÐͨÐÅ£¬ÊÇÒ»ÖÖ¼ò½àµÄ±à³Ì·½·¨¡£VC4.0°æºÍVC5.0°æËùÌṩµÄͨÐſؼþÂÔÓв»Í¬£¬ÏÂÃæÕë¶ÔÕâÁ½¸ö°æ±¾£¬

¶ÔOLEͨÐſؼþ×ö¾ßÌå½éÉÜ¡£



3.1¡¡Í¨ÐſؼþµÄ²åÈë



¡¡¡¡ÔÚVC++4.0 Ï£¬Ê×ÏÈÉú³ÉÒ»¸öÏîÄ¿£¬»òÕß´ò¿ªÒ»¸ö´æÔÚµÄÏîÄ¿¡£Ñ¡Ôñ²Ëµ¥Insert/Component¡­£¬³öÏÖComponent Gallery´°¿Ú£¬

Ñ¡ÖÐOLE ControlsϵÄMicrosoft CommControl,Ë«»÷¾Í½«¿Ø¼þǶÈëµ½ÏîÄ¿ÎļþÖÐÁË¡£ÔÚVC++5.0ÏÂ,Ñ¡²Ëµ¥Project/Add To Project,

½«»áÓÐÒ»×Ӳ˵¥£¬ Ñ¡ÖÐ Component and ControlsÏעÒâÈç¹ûûÓдò¿ªÏîÄ¿£¬ComponentÏî²»»á³öÏÖÔÚ×Ӳ˵¥ÏîÖУ©,½Ó×ÅË«»÷

Registered ActiveX Controls,ÔÚÆäÖлáÕÒµ½Í¨Ðſؼþ5.0,Ë«»÷Ö®±ã¿É²åÈë¡£´Ëʱ´ò¿ª¶Ô»°¿ò±à¼­Æ÷,ÔÚ¹¤¾ßÌõÖлῴµ½ÐÂÔöµÄͨÐÅ

¿Ø¼þ¡£



3.2¡¡ÔÚ³ÌÐòÖÐʹÓÃͨÐſؼþ



¡¡¡¡ÏóËùÓÐÆäËûOLE¿Ø¼þÒ»Ñù,ͨÐſؼþÒ²ÊÇÓÃһϵÁеÄÊôÐÔºÍÓû§½Ó¿Ú£¬Óû§ÓÃGet¡­º¯ÊýµÃµ½ÊôÐԵĵ±Ç°Öµ,Óà Set¡­º¯ÊýÉèÖÃÊô

ÐÔÖµ¡£¿Ø¼þÌṩÁË27¸öÊôÐÔ£¬´ó²¿·ÖÊôÐÔ½öºÍModemÁ¬½ÓÓйأ¬ÏÖ½«³£ÓõÄÊôÐÔÁоÙÈçÏ£º

¡¡¡¡CommPort£º¡¡ÉèÖò¢·µ»ØÍ¨Ðſںţ¬È±Ê¡ÖµÎªCOM1£¬¿ÉÉèÖÃ1-16¸ö¡£

¡¡¡¡Settings£º¡¡ÉèÖò¢·µ»Ø²¨ÌØÂÊ¡¢ÆæÅ¼Ð£Ñé¡¢Êý¾Ýλ¡¢Í£Ö¹Î»µÄ×Ö·û´®¡£ÆäÖв¨ÌØÂʵķ¶Î§Îª300b/s-19200b/s¡£

¡¡¡¡PortOpen£º¡¡ÉèÖò¢·µ»ØÍ¨ÐſڵÄ״̬£¬Í¬Ê±ÓÃÀ´´ò¿ªºÍ¹Ø±ÕͨÐſڡ£

¡¡¡¡InputLen£º¡¡¾ö¶¨Ã¿´ÎInput¶ÁÈëµÄ×Ö·û¸öÊý£¬È±Ê¡Îª0£¬±íʾ¶ÁÈ¡½ÓÊÕ»º³åÇøµÄÈ«²¿ÄÚÈÝ¡£

¡¡¡¡Input£º¡¡¶ÁÈë²¢Çå³ý½ÓÊÕ»º³åÇøµÄ×Ö·û¡£

¡¡¡¡InBufferCount£º¡¡·µ»Ø½ÓÊÕ»º³åÇøÒѽÓÊÕµÄ×Ö·ûÊý£¬Í¨¹ýÖÃ0¿ÉÇå³ý½ÓÊÕ»º³åÇø¡£

¡¡¡¡Output£º¡¡½«·¢Ë͵Ä×Ö·û´®»òÊý×éдµ½·¢ËÍ»º³åÇø¡£

¡¡¡¡InputMode£º¡¡¶¨ÒåInpputÊôÐÔ»ñµÃÊý¾ÝµÄ·½Ê½£¨VC5.0ÐÂÔöÊôÐÔ£©¡£

¡¡¡¡Rthreshold£º¡¡ÉèÖᢷµ»ØÔÚͨÐſؼþÖà ComEvRecieve²¢¼¤·¢ OnCommʼþǰҪ½ÓÊÕµÄ×Ö·ûÊý¡£

¡¡¡¡SThreshold£º¡¡ÉèÖᢷµ»ØÍ¨ÐſؼþÖÃComEvSend²¢¼¤·¢OnCommʼþǰ·¢ËÍ»º³åÇøÖеÄ×îÉÙ×Ö·ûÊý¡£

¡¡¡¡½«Í¨Ðſؼþ·Åµ½¶Ô»°¿òÖУ¬µ±×÷Ò»¸öÆÕͨµÄ¿Ø¼þÀ´Ó᣿ؼþÌṩÁËÁ½ÖÖ´¦Àí·½·¨£ºÒ»ÊDzéѯ£¬Ò»ÊÇʼþÇý¶¯¡£¶ÔÓڽϼòµ¥µÄͨ

ÐÅÈÎÎñ£¬¿Éͨ¹ý²éѯ´®¿ÚµÄCommEventÊôÐÔÀ´Á˽â×î½ü·¢ÉúµÄʼþ»ò´íÎó²¢½øÐÐÏàÓ¦µÄ´¦Àí£¬½Ï¸´ÔÓµÄͨÐÅÈÎÎñ¾ÍӦʹÓÃʼþÇý¶¯½Ó

¿Ú¡£ÓÃʼþÇý¶¯·½·¨Ê±£¬Òª¶¨ÒåCMSComm±äÁ¿£¬ÒÔºóÕë¶Ô´Ë¶ÔÏó²Ù×÷¼´¿É¡£Ìí¼ÓÏûÏ¢´¦Àíº¯ÊýʱҪÓÃÀàÏòµ¼ClassWizard£¬Ñ¡Öж¨Òå

µÄ CMSComm±äÁ¿²¢µ¥»÷£¬ÔÚÏûÏ¢À¸Ë«»÷ OnCommÏî¾ÍÉú³ÉÁËÏûÏ¢´¦Àíº¯Êý¡£ ÔÚ±àд·¢ËͺͽÓÊÕº¯Êýʱ£¬ÒªÖصã×¢Ò⼸¸öÊôÐÔµÄÓ÷¨¡£

±ÈÈçInBufferCountÊôÐÔ·µ»Ø½ÓÊÕ»º³åÇøÖÐÒÑÊÕµ½µÄ×Ö½ÚÊý£¬²éѯ·½·¨¿ÉÀûÓøÃÊôÐÔ£¬¿´ÊÇ·ñÊÕµ½Á˹涨ÊýÄ¿µÄ×Ö½Ú¡£»¹ÓÐ Rthreshold

 ºÍ SThresholdÊôÐÔ£¬¶ÔÓÉ·¢ËͺͽÓÊÕ¼¤·¢µÄOnCommʼþÆðמö¶¨ÐÔµÄ×÷Óá£Rthreshold µÄÖµ´ú±íÿµ±½ÓÊÕ»º³åÇøÖÐÓиÃÊýÄ¿µÄ×Ö

 ·ûʱ¾Í²úÉú OnCommʼþ, Õâ¶Ô¹Ì¶¨³¤¶ÈµÄÖ¡½ÓÊշdz£ÓÐÓÃ,¿É½« Rthreshold ÉèΪ֡³¤¶È£¬Ã¿ÊÕµ½Ò»Ö¡¾Í»á¼¤·¢ OnCommʼþ,ÔÚÏû

 Ï¢´¦Àíº¯ÊýÖÐÌí¼Ó´úÂë¾ÍÄÜÍê³É½ÓÊÕºóµÄ´¦Àí¡£·¢ËͱȽÓÊÕ¼òµ¥£¬Ö»²»¹ýÓÃSThresholdÊôÐÔ¡£

¡¡¡¡¸ÅÀ¨ÆðÀ´£¬ÓÿؼþʵÏÖ´®ÐÐͨÐÅÓ¦¸Ã×ñÑ­ºÍÓÃAPIº¯Êý±àд³ÌÐòÏàͬµÄ¹ý³Ì£¬Ö»²»¹ýÕâÀïÓÿؼþµÄÊôÐÔ´úÌæÁËAPIº¯Êý¡£



3.3¡¡ÆäËü×¢ÒâÊÂÏî



¡¡¡¡VC4.0ϺÍVC5.0ÏÂInputÊôÐԵķµ»ØÖµ²»Í¬¡£ÔÚ VC4.0ÏÂInput ·µ»ØµÄÊÇCStringÀ࣬¶øÔÚVC5.0Ï£¬·µ»Ø COleVariantÀà¡£

COleVariantÀà·â×°ÁËVARIANTÊý¾ÝÀàÐÍ£¬¸Ã½á¹¹Ò²ÊÇOutputÊôÐÔËùÒªÇóµÄÀàÐÍ¡£ÒªÓúÿؼþ¾Í±ØÐëÁ˽â VARIANT½á¹¹£¬ ¸Ã½á¹¹ÄÒÀ¨

ÁËËùÓг£Óõļòµ¥Êý¾ÝÀàÐÍ¡£µ«ÊǽṹÖÐÿ´Î¿ÉÓõÄÊý¾ÝÀàÐÍÖ»ÓÐÒ»ÖÖ£¬ÓɽṹµÄ³ÉÔ±vtʶ±ð¡£ÀýÈç¶Ô×Ö·û´®bstrVal,vt=8,¶Ôshort

ÀàÐÍ£¬vt=2µÈµÈ¡£Í¬Ê±×¢Òâµ½VC5.0¿Ø¼þÔö¼ÓÁË InputModeÊôÐÔ,ÌṩÁ½ÖÖÊäÈëģʽ£ºÎı¾ºÍ¶þ½øÖÆ¡£Á½ÖÖ·½Ê½¾ö¶¨ÁËInput½ÓÊÕµÄÁ½ÖÖ

Êý¾ÝÀàÐÍ¡£ÔÚÎı¾·½Ê½Ï£¬Input·µ»ØÖµÔÚ³ÉÔ±bstrValÖÐ,ÀàÐÍΪvt=8£¬ÕâºÍVC4.0Ï·µ»ØCStringÀàÊÇÏàͬµÄ¡£ÔÚ¶þ½øÖÆÄ£Ê½Ï£¬Input

½ÓÊÜÖµÔÚ°²È«Êý×éparrayÖУ¬ÀàÐÍΪ vt=0x2000 ,ÕâÊDZà³ÌʱÈÝÒ׺öÂԵĵط½¡£Ò»°ãÉÏÏÂλ»úͨÐÅʱ£¬ÏÂλ»úµÄÊý¾ÝÊÇÒÔ16½øÖÆÐÎʽ´æ

·Å£¬±àдͨÐųÌÐò½¨ÒéÑ¡Ôñ¶þ½øÖÆÊäÈëģʽ¡£ÓÃÎı¾Ä£Ê½¾Í±ØÐëÔÚ±àÂëʱ×Ðϸ¿¼ÂÇ£¬·ñÔòÈÝÒ×¶ªÊ§Êý¾Ý¡£ÁíÍâ,ÓÃʼþÇý¶¯·½·¨±à³Ìʱ

»¹Ó¦×¢Òâ,OnCommʼþÔÚͨÐÅʼþ»ò´íÎó·¢Éúʱ¶¼»á¼¤·¢£¬ ÔÚ´¦Àíº¯ÊýÖÐÓ¦½«¸÷ÖÖ¿ÉÄܵÄÇé¿öÁоٳöÀ´·Ö±ð´¦Àí,ºÜÖØÒªµÄÒ»µãÊǼ°Ê±

´¦ÀíͨÐÅ´íÎó¡£



4¡¡½áÊøÓï



¡¡¡¡×ܶøÑÔÖ®£¬±ÈÆð·±¶àµÄAPIº¯Êý£¬Í¨Ðſؼþ²»Ê§ÎªÒ»ÖÖ¼ò½àÓÐЧµÄʵÏÖ´®ÐÐͨÐŵÄ;¾¶¡£Ö»ÒªÕÆÎպÿؼþµÄÊôÐÔ£¬¾ÍÄÜÇáËɵرàд

ͨÐųÌÐò¡£±ÊÕßÔÚ±àдһÌ×µçÁ¦ÏµÍ³µÄʵʱ¼à¿ØÈí¼þʱ£¬ÓÃVC++5.0ϵÄͨÐſؼþ³É¹¦µØÊµÏÖÁË΢»úÓëÏÂλ»ú--3720ACM ÒDZíÖ®¼äµÄͨ

ÐÅ,¸ÃÒDZíÊǼÓÄôóPML¹«Ë¾Éú²úµÄ¸ß¼¶µçÁ¦×ÛºÏ¼à¿ØÒÇ±í¡£



ÕÅ¡¡Á¦¡¡Ë¶Ê¿Ñо¿Éú¡£Ñо¿·½Ïò£º¼ÆËã»ú¿ØÖÆÓëÐÅÏ¢¹¤³Ì¡£¡¡ÂÀÕñËࡡ˶ʿ£¬½ÌÊÚ¡£´ÓʼÆËã»ú¿ØÖÆÓëÐÅÏ¢¹¤³Ì¡¢CADµÈ·½ÃæµÄ½ÌѧÓë

Ñо¿¹¤×÷¡£¡¡ÕÔÇìÁÖ¡¡Ë¶Ê¿Ñо¿Éú¡£Ñо¿·½Ïò£º¼ÆËã»ú¿ØÖÆÓëÐÅÏ¢¹¤³Ì¡£



×÷Õßµ¥Î»£º¡¡À¼ÖÝ´óѧµç×ÓÓëÐÅÏ¢¿ÆÑ§Ïµ¡¡¸ÊËà.À¼ÖÝ£¨730000£©



²Î¿¼ÎÄÏ×



¡¡£Û1£Ý¡¡£ÛÃÀ£ÝMicrosoft Corporation.Microsoft Win32³ÌÐòÔ±²Î¿¼´óÈ«£¨¶þ£©. ±±¾©£ºÇ廪´óѧ³ö°æÉ磬1995

¡¡£Û2£Ý¡¡£ÛÃÀ£ÝScott Stanfield Ralph Arvesen.Visual C++ 4¿ª·¢ÈËÔ±Ö¸ÄÏ.±±¾©£º»úе¹¤Òµ³ö°æÉ磬1997 



 

´®ÐÐͨѶͨÓýӿڳÌÐòÉè¼Æ 

¡¡¡¡Â¬ÍûÖÒ 



¡¡¡¡´®ÐÐͨѶÔÚͨѶÁìÓò±»¹ã·ºÓ¦Ó㬱ê×¼µÄRS232½Ó¿ÚÒѳÉΪ¼ÆËã»ú¡¢¼ÆËã»úÍâÉè¡¢½»»»»úºÍÐí¶àͨѶÉ豸µÄ±ê×¼½Ó¿Ú¡£Î¢»úÓë΢»ú¡¢

΢»úÓëÍâÉ衢΢»úÓë³Ì¿Ø½»»»»úµÈ¶¼¿ÉÒÔͨ¹ýRS232½Ó¿Ú½øÐз½±ãµÄÁ¬½Ó£¬ÒÔʵÏÖ¿ØÖÆÍâÉèºÍ´«ÊäÊý¾ÝµÈÄ¿µÄ¡£ 



¡¡¡¡ÔÚ´®ÐнӿÚÁ¬½ÓÖУ¬°´Á¬½Ó·½Ê½¿É·ÖΪÁ½ÀࣺÓйæ³ÌÁ¬½ÓºÍÎÞ¹æ³ÌÁ¬½Ó¡£ÎÞ¹æ³ÌÁ¬½ÓÔ­Àí±È½Ï¼òµ¥£¬Í¨Ñ¶Ë«·½ÎÞÎÕÊÖ¹ý³Ì¡£Ò»·½ÓÐ

Êý¾ÝÐèÒª·¢ËÍ£¬ÔòÁ¢¼´Í¨¹ý´®Ðнӿڷ¢ËͳöÈ¥£¬ÁíÒ»·½±»¶¯½ÓÊÜ¡£¸Ã·½Ê½ËäÈ»ÈÝÒ×ʵÏÖµ«Êý¾Ý·¢Ë͵ÄÍêÕûÐÔÈ´ÎÞ·¨µÃµ½±£Ö¤£¬ÔڹؼüÈÎ

ÎñµÄÁ¬½ÓÖоù²»²ÉÓø÷½Ê½£¬±ÊÕßÔڴ˲»ÔÙ׸Êö¡£¶øÓйæ³ÌͨѶ¹ý³ÌÔò²»Í¬£¬ÔÚ¼×·½ÓÐÊý¾Ý·¢ËÍÇëÇóʱ£¬ÔòÏòÒÒ·½·¢ËÍ"ÇëÇó·¢ËÍÊý¾Ý"

ÃüÁî¡£ÒÒ·½ÊÕµ½ºó£¬Èç×¼±¸¾ÍÐ÷£¬Ôò»ØËÍÈ·ÈÏÐÅÏ¢¡£¼×·½µÃµ½ÒÒ·½µÄÈ·ÈϺ󷽿ɷ¢ËÍÊý¾Ý¡£ÔÚ´ó¶àÊýÇé¿öÏ£¬ÒÒ·½Òª¶ÔÊÕµ½µÄÊý¾Ý½øÐÐ

УÑ飬УÑéÕýÈ··¢ËÍ"ͨѶÖÕÖ¹"ÃüÁ·ñÔò¿É·¢ËÍ"ÖØ·¢"ÃüÁî¡£ÔÚʵ¼ù¹ý³ÌÖУ¬Óйæ³ÌµÄ´®ÐÐÁ¬½Ó¹ý³Ìͨ³£Òª¸´Ôӵö࣬¶øÇÒ²»Í¬µÄÉè

±¸³§É̶¼Óв»Í¬µÄͨѶ¹æ³Ì£¬Ä¿Ç°ÉÐδÐγÉͳһµÄ±ê×¼¡£¼´±ãÊÇͬһÖÖÀàÐ͵ÄÍâÉ裬ÔÚÓë²»Í¬Æ·ÅÆµÄÉ豸½øÐÐÁ¬½Óʱ£¬Ò²ÒªÐÞ¸ÄÔ­´úÂë

À´Âú×㲻ͬÖÖÀà¹æ³ÌµÄÒªÇ󣬴ËÀàÎÊÌâ³£³£»áÀ§ÈųÌÐò¿ª·¢ÈËÔ±¡£±ÊÕßÔÚʵ¼Ê¹¤×÷ÖÐ×ܽá³öÒ»ÖÖ¼òµ¥ÊµÓõÄͨÓùæ³ÌµÄ³ÌÐòÉè¼Æ·½·¨£¬

ÔÚÓë¶àÖÖ´®ÐÐͨѶÉ豸µÄÁ¬½ÓÖÐÈ¡µÃÁËÂúÒâµÄЧ¹û¡£Ôڴ˼òµ¥½éÉÜÆäÔ­Àí£¬²¢Óë¶ÁÕß¹²Í¬Ì½ÌÖ¡£ 



¡¡¡¡ÔÚͨѶµÄ¹ý³ÌÖУ¬ËäÈ»¹æ³ÌµÄ×éºÏǧ±äÍò»¯£¬µ«Í¨Ñ¶¹ý³ÌÖеÄÿһ²½¶¼Óкܶ๲ÐԵĶ«Î÷´æÔÚ¡£Í¨¹ý¶Ô¶àÖÖ´®ÐÐͨѶÉ豸µÄÑо¿£¬

±ÊÕß½«Í¨Ñ¶¹ý³ÌµÄÿһ²½Öè½øÐÐ×ܽᣬ³éÏó³ö¹²ÐԵĶ«Î÷£¬Ôڴ˳Æ×÷ͨѶ"²½Öè¶ÔÏó"¡£Í¨Ñ¶²½Öè¶ÔÏóµÄ¶¨ÒåºÍÓ¦ÓÃÊǸóÌÐòÉè¼Æ·½·¨µÄ

ºËÐÄÄÚÈÝ¡£Ã¿Ò»ÖÖͨѶ¹æ³Ì¶¼¿ÉÒÔ¶¨Òå¶à¸öͨѶ²½Öè¶ÔÏó¡£Õû¸öͨѶ¹ý³ÌµÄµÄʵÏÖ£¬¾ÍÊÇÿһ¸öͨÐŲ½Öè¶ÔÏóÒÀ´Î±»¼¤»î²¢Ö´Ðи÷×Ô¶¨

ÒåµÄ·½·¨µÄÒ»¸öÁ¬¹á¹ý³Ì¡£ 



¡¡¡¡Í¨Ñ¶²½Öè¶ÔÏó(objComStep)Ò»°ã°üÀ¨ÈçÏÂÊôÐÔ£º 



¡¡¡¡£¨1£©ÐòºÅ(StepId)£ºÃ¿Ò»¸öͨѶ²½Öè¶¼ÓÐÒ»¸öΨһµÄ±êʶºÅ£¬Ò»°ãÒÀ¾Ý¸Ã²½ÖèÔÚÕû¸ö¹æ³ÌÖеÄÖ´ÐÐ˳ÐòºÅÀ´¶¨Òå¡£ 



¡¡¡¡£¨2£©×´Ì¬(Status)£ºÃ¿Ò»¸ö²½Öè¿ÉÄÜÓÐËÄÖÖ״̬£º¢Ù·¢ËÍ£º·¢ËÍÃüÁî´úÂ룻¢Ú½ÓÊÜ£º½ÓÊÜÃüÁî´úÂ룻¢ÛÅжϣº¶ÔÉÏÒ»²½Öè½ÓÊÕµ½

µÄÃüÁî½øÐÐÅжϣ¬¼ìÑé½ÓÊÕµÄÃüÁî»òÊý¾ÝÊÇ·ñÕýÈ·£»¢Ü½ÓÊÕÊý¾Ý£º½ÓÊÕÕæÕýÒª´«ÊäµÄÊý¾Ý¡£ 



¡¡¡¡£¨3£©ÃüÁî´úÂë(Command)£º·¢ËÍ»ò½øÐнÓÊÕÅжϵĿØÖÆ´úÂë¡£ 



¡¡¡¡£¨4£©Êý¾Ý´úÂë(Data)£º·¢ËÍ»ò½ÓÊÕÅжϵÄÊý¾Ý´úÂë¡£ 



¡¡¡¡£¨5£©¿Ï¶¨ÐòºÅ(AckStep)£ºÔÚ·¢Ëͳɹ¦ºóÌø×ªµ½¿Ï¶¨ÐòºÅÖ¸¶¨µÄ²½Ö裻Èç½ÓÊÕÅжϳɹ¦£¬Í¬ÑùÌø×ªµ½¿Ï¶¨Ðкš£ 



¡¡¡¡£¨6£©·ñ¶¨ÐòºÅ(NakStep)£ºÔÚ·¢ËͲ»³É¹¦ºóÌø×ªµ½·ñ¶¨ÐòºÅÖ¸¶¨µÄ²½Ö裻Èç½ÓÊÕÅжϲ»³É¹¦£¬Í¬ÑùÌø×ªµ½·ñ¶¨Ðкš£ 



¡¡¡¡£¨7£©ÑÓ³Ù(DelayTime)£ºµ±Ç°²½ÖèÖ´ÐÐÍê±Ï£¬ÑÓ³ÙÏàӦʱ¼äºóÌø×ªµ½ÏÂÒ»¸ö²½Öè¡£ 



¡¡¡¡£¨8£©Ñ­»·ÉÏÏÞ(MaxRunCounts)£ºÓÉÓÚÿһ¸ö²½Öè¿É±»Öظ´Ö´ÐУ¬¶ÔÓÚÿһ¸ö²½ÖèÓÐÒ»¸öÑ­»·ÉÏÏÞ£¬Èç¹ûÖ´ÐдÎÊý´óÓÚ¸ÃÊýÖµ£¬

ÔòÌø×ªµ½Ñ­»·Ìø×ªÐòºÅ¡£ 



¡¡¡¡£¨9£©Ñ­»·Ìø×ªÐòºÅ(BeyondStep)£º¶ÔÓÚµ±Ç°²½Ö豻ѭ»·Ö´ÐеĴÎÊý³¬¹ýÉÏÏÞÊ±Ìø×ªµ½ËùÖ¸¶¨µÄ²½Öè¡£ 



¡¡¡¡£¨10£©¼ÆÊýÆ÷£¨Counter):¼ÇÔØÖ´ÐдÎÊý¡£ 



¡¡¡¡Í¨Ñ¶²½Öè¶ÔÏóµÄ·½·¨¶¨ÒåÈçÏ£º 



¡¡¡¡£¨1£©·¢ËÍ(Send)£ºÍ¨¹ý´®Ðж˿ڷ¢ËÍÊý¾Ý»òÃüÁî´úÂë¡£ 



¡¡¡¡£¨2£©½ÓÊÕ(Receive)£º´Ó´®Ðж˿ڽÓÊÕÊý¾Ý»òÃüÁî´úÂë¡£ 



¡¡¡¡£¨3£©ÅжÏ(Identify)£ºÅжϽÓÊÕÊý¾ÝÊÇ·ñÕýÈ·¡£ 



¡¡¡¡£¨4£©Êä³öÊý¾Ý£¨OutPut)£º½«µÃµ½µÄÊý¾Ýͨ¹ýÍøÂç»òÏûÏ¢´«Ë͸øÆäËü³ÌÐòÄ£¿é¡£ 



¡¡¡¡Íê³ÉÁ˶ÔobjComSetpµÄ¶¨Ò壬ÏÂÒ»²½ÎÒÃǾÍÄܹ»ºÜÈÝÒ×µØÓóÌÐòÓïÑÔÀ´½«ÆäʵÏÖ¡£ÔÚʵ¼Ê±à³Ì¹ý³ÌÖУ¬±ÊÕß½«³ÌÐò×ÜÌå½á¹¹·ÖΪ

²½Ö趨ÒåÄ£¿éºÍ²½ÖèÖ´ÐÐÄ£¿é¡£Í¨¹ý²½Ö趨ÒåÄ£¿é¶¨ÒåËùÓùæ³ÌµÄÿһ¸ö²½ÖèµÄÊôÐÔ£¬½«ÊôÐÔÐÅϢдÈëÅäÖÃÎļþ¡£²½ÖèÖ´ÐÐÄ£¿é°´Åä

ÖÃÎļþÖеÄÐÅÏ¢ÒÀ´Î´´½¨²½Öè¶ÔÏó£¬ÓɸöÔÏóÖ´ÐÐÏàÓ¦µÄ·½·¨¡£²½ÖèÖ´ÐÐÄ£¿é×ÜÌå¿ØÖÆÃ¿¸öobjComStepµÄ¼¤»î˳Ðò£¬Ö±ÖÁÍê³ÉÕû¸öͨ

Ѷ¹æ³Ì¡£²¢½«ÔÚͨѶ¹ý³ÌÖеõ½µÄÊý¾ÝÊä³ö¸øÆäËü³ÌÐòÄ£¿é¡£ 



¡¡¡¡ÏÂÃæÊÇÒ»¸ö´®ÐÐͨѶµÄʵÀý£¬±ÊÕßÓÃÉÏÊöµÄ³ÌÐòÉè¼Æ·½·¨ÊµÏÖÁËPC»úºÍNEC³Ì¿Ø½»»»»úÖ®¼äµÄͨѶ¡£ÎªÁË·½±ãÐðÊö£¬±ÊÕß½«¸Ã³Ì

Ðò³ÆÎª"ͨѶģ¿é"¡£Í¨Ñ¶Ä£¿éµÄÄ¿µÄÊÇͨ¹ý´®ÐÐͨѶµÄ·½·¨À´Íê³ÉÓÃPC»ú¶ÔNECµç»°³Ì¿Ø½»»»»úÎïÒµ¹ÜÀíPMS£¨Property Management

 System)ϵͳ½øÐпØÖƵÄÈÎÎñ¡£ÏµÍ³³É¹¦µØÊµÏÖÁ˶Խ»»»»úµÄ¿ØÖÆ£¬Í¨¹ýPC»úʵÏÖ×Ô¶¯¿ªÍ¨¡¢¹Ø±Õ¡¢³¤Í¾È¨ÏÞ¡¢µç»°½ÐÔç¡¢µç»°ÁôÑÔ

 ¡¢µç»°ÃâÈÅ¡¢µç»°ÉèÖ÷¿¼ä״̬µÈ¶àÖÖ¹¦ÄÜ¡£ 



 ¡¡¡¡Í¼1ÊǸùæ³ÌµÄ״̬ͼ¡£ 



¡¡¡¡Í¼1 



¡¡¡¡ËµÃ÷£º£¨1£©ÔÚ½ÓÊպͷ¢ËÍÖ®¼äµÄʱ¼ä¼ä¸ôÊÇ1Ã룻£¨2£©ÔÚ½ÓÊÕµ½NAKºó£¬Öظ´·¢Ë͵ĴÎÊýΪ3£»£¨3£©½ÓÊÕ·½Ã»ÓлØÓ¦£¨NO ANSWER£©

¶øÖظ´Ñ¯ÎʵĴÎÊýΪ15£»£¨4£©eot¹æ³ÌÖÕÖ¹¡£ 



¡¡¡¡ÔÚͨѶģ¿éÖУ¬Ê×ÏȽ«Í¨Ñ¶¹æ³ÌµÄÿһ²½ÖèÓò½Öè¶ÔÏóµÄ¶¨Ò巽ʽ¶¨Òå¸Ã¹æ³Ì£¬Æä¾ßÌå²½ÖèÈçÏ£º



ÐòºÅ ״̬ ÃüÁî´úÂë Êý¾Ý´úÂë ¿Ï¶¨ÐòºÅ ·ñ¶¨ÐòºÅ ÑÓ³Ù Ñ­»·ÉÏÏÞ Ñ­»·Ìø×ªÐòºÅ 

1 ·¢ËÍ sa,ua,enq  2 1 1 15 ¡¡¡¡ 9 

2 ½ÓÊÕ ack  5 ¡¡¡¡ 3 1 1 ¡¡¡¡ 9 

3 ÅÐ¶Ï nak  1 ¡¡¡¡ 4 1 3 ¡¡¡¡ 9 

4 ÅÐ¶Ï ÎÞ»ØÓ¦  1 ¡¡¡¡ 1 1 15 ¡¡¡¡ 9 

5 ·¢ËÍ  data,bcc 6 5 ¡¡¡¡ 1 15 9 ¡¡¡¡ 

6 ½ÓÊÕ ack  9 ¡¡¡¡ 7  1 ¡¡¡¡ 9 

7 ÅÐ¶Ï nak  5 ¡¡¡¡ 8 1 3 ¡¡¡¡ 9 

8 ÅÐ¶Ï ÎÞ»ØÓ¦  5 ¡¡¡¡ 5 1 15 ¡¡¡¡ 9 

9 ·¢ËÍ eot  ½áÊø  0 1 ¡¡¡¡  



¡¡¡¡Íê³ÉÉÏÊöÅäÖú󣬽«ÐÅϢдÈëÅäÖÃÎļþ»òÊý¾Ý¿â¡£ÔÚͨѶģ¿éÖ´ÐÐʱ£¬¶ÁÈë¸ÃÅäÖÃÐÅÏ¢ £¬ÒÀ´ÎÉú³ÉͨѶ²½Öè¶ÔÏó¡£¶ÔÏó·½·¨µÄ

Ö´Ðйý³Ì¼´ÊÇͨѶ¹æ³ÌµÄÖ´ÐÐÐйý³Ì¡£ÔÚʵ¼Ê±à³ÌÖпɽ«¸ÃÄ£¿éÓëÆäËü³ÌÐòÁ¬½Ó±àÒë³ÉEXEÎļþ»òÉú³É¶ÀÁ¢µÄDLLÎļþ¹©ÆäËüͨѶ³Ì

Ðòµ÷Ó㬾ù¿ÉÈ¡µÃÂúÒâµÄЧ¹û¡£ÔÚÆäËüÀàÐ͵ÄͨѶ¡¢ÏûÏ¢´«µÝ¡¢ÍøÂçÊý¾Ý´«ÊäÖоù¿ÉÓøÃ˼·д³öͨÓõĽӿڳÌÐò£¬½â¾öÒìÖÖ»úÐÍÁ¬

½ÓµÄͨѶÎÊÌâ¡£ 

 







VCÔÚwin95ϱàдÓÃÓÚ´®ÐÐͨѶµÄ³ÌÐò



                     ------×÷Õß Ç廪BBS ±´±´



¼ÈÈ»ÓÐÕâô¶àÈËÎÊÕâ¸öÎÄÌ壬±´±´¾Í¸ø¸öVisual C++ 4.2дµÄ 

Window 95´®¿ÚͨѶº¯Êý¼¯ºÏ(Ö»ÊÊÓÃÓÚ32λ) 



ÐèҪ˵Ã÷µÄÊÇ£ºÕâÊÇÎÒ³ÌÐòµÄÒ»²¿·Ö£¬Òò´ËÓÐһЩÓë¾ßÌåÓ¦ÓÃÎ޹صIJ¿·Ö¡£ 

µ«ÎÒ¾õµÃ¹Ø¼üÊÇÔ­Àí£¬¶ø²»ÊdzÌÐò±¾Éí.ºóÃæÓÐЩʹÓýéÉÜ£¬°ïÖúÀí½âÕⳤµÄ³ÌÐò¡£ 



Í·Îļþ(.H) 



#include "StdAfx.h" 



#define GWL_PGPSINFO 0 

#define GPSEXTRABYTES sizeof( LONG ) 



#define MAXPORTS 4 



#define CN_SEND WM_USER+100 



#define RXQUEUE 4096 

#define TXQUEUE 4096 



// cursor states 



#define CS_HIDE 0x00 

#define CS_SHOW 0x01 



// Flow control flags 



#define FC_DTRDSR 0x01 

#define FC_RTSCTS 0x02 

#define FC_XONXOFF 0x04 



// ascii definitions 



#define ASCII_BEL 0x07 

#define ASCII_BS 0x08 

#define ASCII_LF 0x0A 

#define ASCII_CR 0x0D 

#define ASCII_XON 0x11 

#define ASCII_XOFF 0x13 



// data structures 



typedef struct tagGPSINFO 

{ 

HANDLE idComDev; 

BYTE bPort; 

BOOL fConnected; 

BYTE bByteSize,bParity,bStopBits; 

DWORD dwBaudRate; 



HANDLE hPostEvent,hWatchThread,hWatchEvent; 

HWND hTermWnd; 

DWORD dwThreadID; 

OVERLAPPED osWrite,osRead; 

} GPSINFO, *PGPSINFO ; 



#define COMDEV( x ) (x -> idComDev) 

#define PORT( x ) (x -> bPort) 

#define CONNECTED( x ) (x -> fConnected) 

#define BYTESIZE( x ) (x -> bByteSize) 

#define PARITY( x ) (x -> bParity) 

#define STOPBITS( x ) (x -> bStopBits) 

#define BAUDRATE( x ) (x -> dwBaudRate) 



#define POSTEVENT( x ) (x -> hPostEvent) 

#define HTHREAD( x ) (x -> hWatchThread) 

#define THREADID( x ) (x -> dwThreadID) 

#define WRITE_OS( x ) (x -> osWrite) 

#define READ_OS( x ) (x -> osRead) 



// function prototypes (private) 



LRESULT NEAR CreateGPSInfo(HWND,BYTE nPort=1); 

BOOL NEAR DestroyGPSInfo(); 



int NEAR ReadCommBlock(LPSTR,int); 

BOOL NEAR WriteCommBlock(LPSTR,DWORD); 

BOOL NEAR OpenConnection(); 

BOOL NEAR SetupConnection(); 

BOOL NEAR CloseConnection(); 



// function prototypes (public) 



DWORD FAR PASCAL CommWatchProc(LPSTR); 





¾ßÌåʵÏÖÇë¿´ÏÂÎÄ(ΪÁËÕâÎÄÕ£¬ÎÒ¶¼¶ÎÏß2´ÎÁË) 



CPPʵÏÖ²¿·Ö£º 



#include "StdAfx.h" 

#include "Com.h" 



HWND hGPSWnd=NULL; 

PGPSINFO npGPSInfo=NULL; 



LRESULT NEAR CreateGPSInfo(HWND hWnd,BYTE nPort) 

{ 

if (NULL==(npGPSInfo=(PGPSINFO)LocalAlloc(LPTR,sizeof(GPSINFO)))) 

return ((LRESULT)-1) ; 



hGPSWnd=hWnd; 



COMDEV(npGPSInfo)=0; 

CONNECTED(npGPSInfo)=FALSE; 

PORT(npGPSInfo)=nPort; 

BAUDRATE(npGPSInfo)=CBR_9600; 

BYTESIZE(npGPSInfo)=8; 

PARITY(npGPSInfo)=NOPARITY; 

STOPBITS(npGPSInfo)=ONESTOPBIT; 



WRITE_OS(npGPSInfo).Offset=0; 

WRITE_OS(npGPSInfo).OffsetHigh=0; 

READ_OS(npGPSInfo).Offset=0; 

READ_OS(npGPSInfo).OffsetHigh=0; 



// create I/O event used for overlapped reads / writes 



READ_OS(npGPSInfo).hEvent=CreateEvent(NULL,TRUE,FALSE,NULL); 

if (READ_OS(npGPSInfo).hEvent==NULL) 

{ LocalFree( npGPSInfo ) ; 

return ( -1 ) ; 

} 

WRITE_OS(npGPSInfo).hEvent=CreateEvent(NULL,TRUE,FALSE,NULL); 

if (NULL==WRITE_OS(npGPSInfo).hEvent) 

{ CloseHandle(READ_OS(npGPSInfo).hEvent); 

LocalFree(npGPSInfo) ; 

return (-1) ; 

} 



return ( (LRESULT) TRUE ) ; 

} 



BOOL NEAR DestroyGPSInfo() 

{ 

if (!npGPSInfo) return (FALSE); 



if (CONNECTED(npGPSInfo)) CloseConnection(); 



CloseHandle(READ_OS(npGPSInfo).hEvent); 

CloseHandle(WRITE_OS(npGPSInfo).hEvent); 

CloseHandle(POSTEVENT(npGPSInfo)); 



LocalFree(npGPSInfo); 

return (TRUE); 

} 



BOOL NEAR OpenConnection() 

{ 

char szPort[15]; 

BOOL fRetVal; 

HCURSOR hOldCursor,hWaitCursor; 



HANDLE hCommWatchThread; 

DWORD dwThreadID; 

COMMTIMEOUTS CommTimeOuts; 



if (!npGPSInfo) return (FALSE); 



hWaitCursor=LoadCursor(NULL,IDC_WAIT) ; 

hOldCursor=SetCursor(hWaitCursor) ; 



wsprintf(szPort,"COM%d",PORT(npGPSInfo)); 



if

((COMDEV(npGPSInfo)=CreateFile(szPort,GENERIC_READ|GENERIC_WRITE, 



0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED, 

NULL))==(HANDLE)-1) 

return ( FALSE ) ; 

else 

{ SetCommMask(COMDEV(npGPSInfo),EV_RXCHAR); 

SetupComm(COMDEV(npGPSInfo),4096,4096); 



PurgeComm(COMDEV(npGPSInfo),PURGE_TXABORT|PURGE_RXABORT|PURGE_TXCLEAR|PURGE_R

XCLEAR); 

CommTimeOuts.ReadIntervalTimeout=0xFFFFFFFF; 

CommTimeOuts.ReadTotalTimeoutMultiplier=0; 

CommTimeOuts.ReadTotalTimeoutConstant=1000; 

CommTimeOuts.WriteTotalTimeoutMultiplier=0; 

CommTimeOuts.WriteTotalTimeoutConstant=1000; 

SetCommTimeouts(COMDEV(npGPSInfo),&CommTimeOuts); 

} 



fRetVal=SetupConnection(); 



if (fRetVal) 

{ CONNECTED(npGPSInfo)=TRUE; 

if

(NULL==(hCommWatchThread=CreateThread((LPSECURITY_ATTRIBUTES)NULL, 



0,(LPTHREAD_START_ROUTINE)CommWatchProc, 

(LPVOID)NULL,0,&dwThreadID))) 

{ CONNECTED(npGPSInfo)=FALSE; 

CloseHandle(COMDEV(npGPSInfo)); 

fRetVal=FALSE; 

} 

else 

{ THREADID(npGPSInfo)=dwThreadID; 

HTHREAD(npGPSInfo)=hCommWatchThread; 

EscapeCommFunction(COMDEV(npGPSInfo),SETDTR); 

} 

} 

else 

{ CONNECTED(npGPSInfo)=FALSE; 

CloseHandle(COMDEV(npGPSInfo)); 

} 



SetCursor(hOldCursor); 

return (fRetVal); 

} 



BOOL NEAR SetupConnection() 

{ BOOL fRetVal; 

DCB dcb; 



if (!npGPSInfo) return(FALSE); 



dcb.DCBlength=sizeof(DCB); 



GetCommState(COMDEV(npGPSInfo),&dcb); 



dcb.BaudRate=BAUDRATE(npGPSInfo); 

dcb.ByteSize=BYTESIZE(npGPSInfo); 

dcb.Parity=PARITY(npGPSInfo); 

dcb.StopBits=STOPBITS(npGPSInfo); 



dcb.fOutxDsrFlow=FALSE; 

dcb.fDtrControl=DTR_CONTROL_ENABLE; 



dcb.fOutxCtsFlow=FALSE; 

dcb.fRtsControl=RTS_CONTROL_ENABLE; 

dcb.fInX=dcb.fOutX=FALSE; 

dcb.fBinary=TRUE; 

dcb.fParity=TRUE; 



fRetVal=SetCommState(COMDEV(npGPSInfo),&dcb); 

return (fRetVal); 

} 



BOOL NEAR CloseConnection() 

{ 

if (!npGPSInfo) return(FALSE); 



CONNECTED(npGPSInfo)=FALSE; 



SetCommMask(COMDEV(npGPSInfo),0); 

while(THREADID(npGPSInfo)!=0); 



EscapeCommFunction(COMDEV(npGPSInfo),CLRDTR); 

PurgeComm(COMDEV(npGPSInfo),PURGE_TXABORT|PURGE_RXABORT| 

PURGE_TXCLEAR|PURGE_RXCLEAR); 

CloseHandle(COMDEV(npGPSInfo)); 



return (TRUE); 

} 



int NEAR ReadCommBlock(LPSTR lpszBlock,int nMaxLength) 

{ 

BOOL fReadStat ; 

COMSTAT ComStat ; 

DWORD dwErrorFlags; 

DWORD dwLength; 

DWORD dwError; 



if (!npGPSInfo) return(FALSE); 



ClearCommError(COMDEV(npGPSInfo),&dwErrorFlags,&ComStat); 

dwLength=min((DWORD)nMaxLength,ComStat.cbInQue); 



if (dwLength>0) 

{ fReadStat=ReadFile(COMDEV(npGPSInfo),lpszBlock, 



dwLength,&dwLength,&READ_OS(npGPSInfo)); 

if (!fReadStat) 

{ if (GetLastError()==ERROR_IO_PENDING) 

{ OutputDebugString("\n\rIO Pending"); 



while(!GetOverlappedResult(COMDEV(npGPSInfo),&READ_OS(npGPSInfo),&dwLength,TR

UE)) 

{ dwError=GetLastError(); 

if(dwError == ERROR_IO_INCOMPLETE)

continue; 

} 



} 

else 

{ dwLength=0; 



ClearCommError(COMDEV(npGPSInfo),&dwErrorFlags,&ComStat); 

} 

} 

} 

return ( dwLength ) ; 

} 



BOOL NEAR WriteCommBlock(LPSTR lpByte,DWORD dwBytesToWrite) 

{ BOOL fWriteStat; 

DWORD dwBytesWritten; 

DWORD dwErrorFlags; 

DWORD dwError; 

COMSTAT ComStat; 



if (!npGPSInfo) return(FALSE); 



fWriteStat=WriteFile(COMDEV(npGPSInfo),lpByte,dwBytesToWrite, 

&dwBytesWritten,&WRITE_OS(npGPSInfo)); 



if (!fWriteStat) 

{ if(GetLastError()==ERROR_IO_PENDING) 

{ while(!GetOverlappedResult(COMDEV(npGPSInfo), 

&WRITE_OS(npGPSInfo),&dwBytesWritten,TRUE)) 

{ dwError=GetLastError(); 

if(dwError == ERROR_IO_INCOMPLETE)

continue; 

else 

{ 

ClearCommError(COMDEV(npGPSInfo),&dwErrorFlags,&ComStat); 

break; 

} 

} 

} 

else 

{ 

ClearCommError(COMDEV(npGPSInfo),&dwErrorFlags,&ComStat); 

return ( FALSE ); 

} 

} 

return ( TRUE ) ; 



} 



DWORD FAR PASCAL CommWatchProc(LPSTR) 

{ DWORD dwEvtMask; 

OVERLAPPED os; 

int nLength; 

BYTE abIn[1024]; 



memset(&os,0,sizeof(OVERLAPPED)); 



// create I/O event used for overlapped read 



os.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL); 

if (os.hEvent==NULL) 

{ MessageBox(NULL,"Failed to create event for thread!","GPS

Error!",MB_ICONEXCLAMATION|MB_OK); 

return ( FALSE ) ; 

} 



if (!SetCommMask(COMDEV(npGPSInfo),EV_RXCHAR)) return (FALSE); 



while (CONNECTED( npGPSInfo)) 

{ dwEvtMask=0 ; 

WaitCommEvent(COMDEV(npGPSInfo),&dwEvtMask,NULL); 



if ((dwEvtMask&EV_RXCHAR)==EV_RXCHAR) 

{ do 

{ if

(nLength=ReadCommBlock((LPSTR)abIn,1024)) 

{ 

//WriteCommBlock((LPSTR)abIn,nLength ); 

*(abIn+nLength)=0; 



::SendMessage(hGPSWnd,CN_SEND,nLength,(LONG)(LPSTR)abIn); 

} 

} 

while ((nLength>0)&&(CONNECTED( npGPSInfo))); 

} 

} 



CloseHandle(os.hEvent); 

THREADID(npGPSInfo)=0; 

HTHREAD(npGPSInfo)=NULL; 

return(TRUE); 

} 





¾ÍÕâЩÁË£¬Ï£ÍûÄܶÔÎÊÕâЩÎÊÌâµÄÅóÓÑÓÐËù°ïÖú! 



Ò»°ãʹÓõÄ˳ÐòÊÇ£º 

CreateGPSInfo(±»Í¨ÖªµÄ´°¿Ú¾ä±ú£¬´®¿Ú¶Ë¿ÚºÅ1»ò2); 

OpenConnection();//½¨Á¢Áª½áËü»áµ÷ÓÃSetupConnection 

DestroyGPSInfo();//½â³ýÁª½áËü»áµ÷ÓÃCloseConnection 



¿ÉÒÔÓÃReadCommBlock/WriteCommBlockÀ´¶Á/д´®¿Ú 

CommWatchProcÊǼàÊÓ´®¿ÚµÄỊ̈߳¬ÓÉOpenConnection½¨Á¢ 





µ±´®¿ÚÓÐÊý¾ÝÀ´µÄʱºî£¬Ëü»á֪ͨ'±»Í¨ÖªµÄ´°¿Ú¾ä±ú'µÄ´°¿ÚÊý¾Ý´«µ½µÄÏûÏ¢(×Ô¶¨ÒåµÄ) 

SendMessage(hGPSWnd,CN_SEND,nLength,(LONG)(LPSTR)abIn);



ºÃÁË£¬ÎÄÕ½áÊøÁË£¡Ï£ÍûÄܰïÖúÄ㣡