程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> delphi技術專題---獲取網卡物理地址之NB30.pas單元TNCB詳解以及源代碼分享

delphi技術專題---獲取網卡物理地址之NB30.pas單元TNCB詳解以及源代碼分享

編輯:Delphi

 接下來將要進入Netbios的編程應用階段。要想調用Netbios API函數,需要鏈接系統的NETAPI32.DLL文件。Delphi提供了一個NB30單元Netbios API函數及相關的結構、常量進行了定義。     首先來看看Netbios API包括哪些內容。實際Netbios API只有一個函數:   [delphi] view plaincopy UCHAR Netbios(PNCB: pNCB);   函數中的惟一參數pNCB是一個指向某個網絡控制塊(TNCB)的指針。在那個NCB結構中,包含了為執行一個Netbios命令,相應的Netbios函數需要用到的全部信息。該結構的定義如下:     [delphi] view plaincopy type     // Network Control Block     PNCB = ^TNCB;        TNCBPostProc = procedure(P: PNCB);        TNCB = packed record       ncb_command: Char;         // command code       ncb_retcode: Char;         // return code       ncb_lsn: Char;             // local session number       ncb_num: Char;             // number of our network name       ncb_buffer: PChar;         // address of message buffer       ncb_length: Word;          // size of message buffer       ncb_callname: array[0..NCBNAMSZ - 1] of char;  // blank-padded name of remote       ncb_name: array[0..NCBNAMSZ - 1] of char;      // our blank-padded netname       ncb_rto: Char;             // rcv timeout/retry count       ncb_sto: Char;             // send timeout/sys timeout       ncb_post: TNCBPostProc;    // POST routine address       ncb_lana_num: Char;        // lana (adapter) number       ncb_cmd_cplt: Char;        // 0xff => commmand pending       ncb_reserve: array[0..9] of Char;              // reserved, used by BIOS       ncb_event: THandle;        // HANDLE to Win32 event which                                  // will be set to the signalled                                  // state when an ASYNCH command                                  // completes     end;         雖然TNCB結構比較復雜,但並不是在對Netbios的每次調用中都需要用到該結構內的全部成員。有些數據成員對應的是輸出參數,換言之,自Netbios調用返回之後才會設置這些成員的值。     需要提醒大家的是;進行任何Netbios調用之前,不要一開始就填寫結構內的各個成員,而應先將這個NCB結構清0.TNCB結構中的各個成員的含義如下所示:     (I)ncb_command     ncb_command成員用來指定要執行的Netbios命令。許多命令都可同步或異步與ASYNCH(OX860)標志以及其他命令進行按位(或)OR運算。     (2)ncb_retcode     ncb_retcode成員存儲操作的返回代碼。在一個異步操作進行期間,函數會將該值設為NRC_PENDING。     (3)ncb_lsn     ncb_lsn成員對應一個本地會話編號,與當前環境內的會話有著惟一對應的關系。成功執行了一次NCBCALL或NCBLISTEN入命令後,函數會返回一個新的會話編號。     (4)ncb_num     ncb_num成員指定本地名字的編號。伴隨NCBADDNAME或NCBADDGRNAME命令的每一次調用,都會返回一個新編號。對所有數據報命令,都必須使用一個有效的編號。     (5)ncb_buffer     ncb_buffer成員是一個指針,它指向數據緩沖區,對那些需要發送數據的命令,該緩沖區包含了要送出的實際數據;對於那些需要接收數據的命令,則包含了要從Netbios函數返回的數據,對其他命令來說,如NCBENUM ,緩沖區便是預定義的結構LANA_enum。     (6)ncb_length     ncb_length成員指定緩沖區ncb_buffer的長度(以字節數為單位)。對於接收命令來說,Netbios會將該值設為收到的字節數。若指定的緩沖區不夠大,Netbios就會返回NRC_BUFLEN錯誤。     (7)}ncb_callname     ncb_callname成員指定遠程應用程序的名字。     (8)ncb_name     ncb_name成員指定應用程序已知的名字。     (9)ncb_rto     ncb_rto成員設定接收操作的超時期限。該值應設為500毫秒的一個整數倍數。若為0,表示沒有超時限制。該值是為NCBCALL和NCBLISTEN命令設置的,它們會影響後續的NCBRECV命令。     (10)ncb_sto     ncb_sto成員設定發送操作的超時期限。該值應設為500毫秒的一個整數倍數。若為l,表示不存在超時限制。該值是為NCBCALL和NCBLIST命令設置的,它們會影響後續的NCBSEND和入CBCHAINSEND命令。      (11)ncb_post  www.2cto.com     ncb_post成員指定異步命令完成後需要調用的回調例程的地址,函數原型定義如下:   TNCBPostProc = procedure(P: PNCB);     其中,P指向已完成命令的網絡控制塊。     (12)ncb_lana_num     ncb_lana_num成員指定要在上面執行命令的LANA編號。     (l3)ncb_cmd_cplt     ncb_cmd_cplt成員指定操作的返回代碼。異步操作進行期間,Netbios會將這個值設為NRC_PENDING。     ( l4) ncb_reserve     ncb_reserve成員目前為保留字段,必須為0。     (15)ncb_event     ncb_event成員指定設置為“無信號”(Nonsignaled)狀態的一個Windows事件對象的句柄。完成一個異步命令後,事件便會設置成它的“有信號”(Signaled)狀態。只應人工重設事件。假若脫nb_command未設置ASYNCH標志,或者ncb_post不為0,那麼該字段必須為0.否則,Netbios會返回 NRC_ILLCMD錯誤。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved