局域網中文件夾的共享 Windows NT/2000/XP
在局域網中通過程序實現文件夾的共享,就我知道的應該至少有兩種實現方式。一是修改注冊表,但是這種方法存在的問題也是很明顯的,必須重起機器才能生效。二就是利用 Windows Api函數 NetShareAdd ,通過這個函數我們可以很容易的實現文件夾的共享,而且無需重起計算機。使用這個函數時我們必須注意的是在 Windows NT/2000/XP 和 Windows 95/98/Me 下用法是有很大差別的,這一點我相信大家都有體會,明明在 95 或 98 下實現好好的,可是一到 NT 下就出問題。
其實不光是各位仁兄,我早就提出過這個問題,怎奈一直都沒有解決掉。現在好了,希望讀完後能給大家一點點幫助。
Windows 95/98/Me 下 NetShareAdd 函數聲明在 SVRAPI.DLL 動態連接庫中,而在 2000/XP/NT 下聲明在 NETAPI32.DLL 動態連接庫中。所以我們在不同的操作系統下一定要注意調用不同的 DLL 庫。這些函數詳細的聲明,在新版 MSDN 2002 中有介紹。由於在Delphi中沒有聲明這些函數和他們的參數所以我們要想實現這個函數還必須自己聲明(可能delphi 有聲明我不知道在那個單元中)。順便說一句,我使用的是 delphi5.0 版,可惜他的幫助文件實在是太陳舊了,還是先看看 MSDN 2002 中關於 NetShareAdd 函數的聲明巴!
Windows NT/2000/XP:
NET_API_STATUS NetShareAdd(
LPWSTR servername, //對應 Delphi 中 PWideChar
DWORD level, //對應 DELPHI 中 DWOED
LPBYTE buf, //對應 DELPHI 中 PBYTE
LPDWORD parm_err // 對應 DELPHI 中 PDWORD
);
Windows 95/98/Me: 下面的對應參數就不用說了吧!可以直接看看DELPHI幫助文件。
extern API_FUNCTION
NetShareAdd(
const char FAR * pszServer,
short sLevel,
const char FAR * pbBuffer,
unsigned short cbBuffer
);
特別強調:
我們在聲明上面的函數時,函數參數一定要寫對,也就是一定要正確對應到DELPHI 自己的類型上。不然函數功能無法實現,這一點我已經嘗試了。之所以在NT 下實現不了主要還是,參數類型對應的不對。我們還需要聲明一個記錄類型,在98/95/me 和 nt/2000/xp