您现在的位置是: 软件 > 开发者网络 > 程序方舟 > 开发专栏 > DELPHI开发 > 正文
·速成电脑精英(包分配)白领高薪一族从这里开始



-Java套接字编程(下)
-MediaStudio Pro 6.5教程
-三款卸载软件最新试用
-基于Visual C++的Winsock API研究

Delphi实现NetBIOS广播收发
2001-04-10· ·余六 ··天极论坛

上一页  1 2 3  下一页


  /////////Netbios单元///////////

  unit netbios;

  interface


   uses windows,messages,Forms,SysUtils;

    type

     {$X+}{$A+}

      file://声明一个NCB记录指针


      PNCB=^NCB;

     file://声明一个后处理例程的过程类型

      POST=procedure(var ncbR:PNCB);

     file://以下是NCB记录,教训1:将上面的编译选项置为{$A+}以取消数据对齐。如果在广播中有浮点数的话,数据对齐会让你大吃苦头!我已经有过惨痛教训!:(

      NCB=record

      ncb_command:UCHAR;

      ncb_retcode:UCHAR;

      ncb_lsn:UCHAR;

      ncb_num:UCHAR;

      ncb_buffer:PCHAR;

      ncb_length:WORD;

      ncb_callname:array [1..16] of UCHAR;

      ncb_name:array [1..16] of UCHAR;

      ncb_rto:UCHAR;

      ncb_sto:UCHAR;

      ncb_post:POST;

      ncb_lana_num:UCHAR;

      ncb_cmd_cplt:UCHAR;

      ncb_reserve:array [1..10] of UCHAR;

      ncb_event:HANDLE;

      end;

     file://声明自己的Netbios函数。教训2:一定要使用pascal调用规范,否则,嘿嘿!!

     function NetbiosSR(ncbX:PNCB):UCHAR;pascal;

     file://初始化NCB

      procedure InitNCB(var ncbY:PNCB);

     file://后处理例程,注意使用远指针

      procedure postrout(var ncbR:PNCB);stdcall;far;

       var

        char_buffer:array[0..511]of UCHAR;

        int_buffer:array[1..512]of Byte;

       implementation

        file://调用系统的Netbios。dll中的Netbios函数标号是6。Delphi搜索外部文件的顺序是当前目录→系统目录→其他目录,别忘了保证存在Netbios.dll

        function NetbiosSR(ncbX:PNCB):UCHAR;external

       ‘netbios'' index 6;

        procedure InitNCB(var ncbY:PNCB);

         var

          x:integer;

         begin

          ncbY.ncb_command:=0;

         ncbY.ncb_retcode:=0;

          ncbY.ncb_lsn:=0;

          ncbY.ncb_num:=0;


          ncbY.ncb_length:=512; file://数据缓冲长度,最大512B

          for x:=1 to 16 do

           begin

            ncbY.ncb_callname[x]:=0;

            ncbY.ncb_name[x]:=0;

           end;

            ncbY.ncb_rto:=0;

            ncbY.ncb_sto:=0;


            ncbY.ncb_lana_num:=0;


            ncbY.ncb_cmd_cplt:=0;

            for x:=1 to 10 do

             ncbY.ncb_reserve[x]:=0;

            ncbY.ncb_event:=0;

            end;

           file://后处理例程的作用是当接收到广播消息时,立即向相应窗口发送消息。我在这里偷了点懒,以广播方式发送一个定时器消息。如果你愿意可以向指定窗口发送自定义消息,这样要复杂一些

  首先,要把指定窗口的句柄传递给后台处理例程。通常这是做不到的,但可以利用一些技巧做到。在NCB记录后面紧挨着声明一个句柄类型,然后把指定窗口的句柄赋值给它的实例变量;这样句柄变量的地址与NCB是连续的。在后处理中通过指针或汇编语句将ncbR的地址移到最后一个字节+1,就是窗口句柄的起始地址。明白吗?至于自定义消息,需要重新编译连接库,限于篇幅我就不罗嗦了,有兴趣的可以自己尝试。

上一页  1 2 3  下一页

■ 相关内容
 LED数码管仿真显示程序
 Delphi中ListBox控件的六种特效
 网上听广播
  网上听广播
 Delphi中多库关联查询
 VC用Ado接口连接和使用数据库
 Delphi数据压缩处理
 Powerbuilder 控件的二次开发
 Delphi中用Adsi创建IIS虚拟目录
 数据库正规化和设计技巧
 自编扫雷程序详解(Delphi版)
 提升PHP速度全攻略
 广播技术
感谢 访问天极网,如果您觉得该文章涉及版权问题,请看这里!