wangchao.org
添加收藏 | 博客
 
购物视频论坛IT业界自然风光美女图片王朝网络小游戏BT下载生活百科编程设计手机图铃小说
 
笑话 | 水库 | 娱乐 | 体育 | 英语 | 宠物 | 美食 | 旅游 | 养生 | 手机 | 数码 | 汽车 | 珠宝 | 美容 | 装修 | 厨房 | 科普 | 动物 | 植物 | 影音 | 百科 | 知道 | 词典
  
 
 您好! 您现在位于: 王朝网络 → 编程设计 → 《如何在Win9x/2k下建立共享目录返回上一页 
 
1楼 

如何在Win9x/2k下建立共享目录

  网上购物、在线购物、购物搜索 欢迎光临本站购买图书、影视、音乐、数码、百货,手机等商品。

  在Windows中建立一个共享目录,通常是使用NetShareAdd函数.但是在Win2k和Win9x下,这个函数分别是包含在Netapi32.dll和Svrapi.dll中.
  那么假如直接在程序中使用Netapi32.lib或Svrapi.lib,在不同的操作系统下运行时会发生找不到xxx函数的输出错误. 解决的办法就是通过GetProcAddress动态获取NetShareAdd.正好ccrun在csdn回答一位网友的问题,顺便写了些代码,在这里贴出来.
  
  注:
  1. 以下代码已在Win2k ADV Server和Win9x SE中通过测试.编译时不需要包含lm.h或Svrapi.h,假如包含的话,会引起数据类型重名的错误.
  2. 请使用Borland C++ Builder编译器.假如您用VC,个别参数需要改动
  
  代码如下:
  
  typedef DWord (WINAPI *NETSHAREADD2K)(LPWSTR, DWORD, LPBYTE, LPDWORD);
  typedef DWORD (WINAPI *NETSHAREADD9X)(const char FAR*, short, const char FAR*, unsigned short);
  NETSHAREADD2K NetShareAdd2k;
  NETSHAREADD9X NetShareAdd9x;
  
  bool bWinNT; // 操作系统标志
  HINSTANCE hDll; // DLL文件句柄
  
  #define NNLEN 80 // 共享名的长度
  #define LM20_NNLEN 12 // LM 2.0 共享名的长度
  #define SHPWLEN 8 // 共享密码的长度
  #define STYPE_DISKTREE 0 // 磁盘共享
  #define SHI50F_FULL 0x0002
  #define NERR_SUCcess 0 // 操作成功
  
  #define NERR_BASE 2100
  #define NERR_DuplicateShare (NERR_BASE+18) // 共享名称已经存在
  #define NERR_RedirectedPath (NERR_BASE+17) // 重定向资源的操作非法
  #define NERR_UnknownDevDir (NERR_BASE+16) // 设备或目录不存在
  
  typedef struct _share_info_50 // 用于Win9x
  {
   char shi50_netname[LM20_NNLEN+1]; // 共享名
   unsigned char shi50_type; //
  
  
   unsigned short shi50_flags; //
   char FAR * shi50_remark; // ANSI 备注
   char FAR * shi50_path; // 共享的资源,也就是共享的目录
   char shi50_rw_password[SHPWLEN+1]; // 可读写的密码
   char shi50_ro_password[SHPWLEN+1]; // 只读密码
  }share_info_50;
  
  typedef struct _SHARE_INFO_2 // 用于Win2k
  {
   LPWSTR shi2_netname;
   DWORD shi2_type;
   LPWSTR shi2_remark;
   DWORD shi2_permissions;
   DWORD shi2_max_uses;
   DWORD shi2_current_uses;
   LPWSTR shi2_path;
   LPWSTR shi2_passwd;
  }SHARE_INFO_2, *PSHARE_INFO_2, *LPSHARE_INFO_2;
  
  //---------------------------------------------------------------------------
  bool __fastcall InitApi() // 根据操作系统的不同,从Dll中获取API
  {
   // 判定系统平台
   OSVERSIONINFO info;
   info.dwOSVersionInfoSize = sizeof(info);
   GetVersionEx(&info);
   bWinNT = (info.dwPlatformId == VER_PLATFORM_WIN32_NT)? true: false;
  
   if(bWinNT)
   {
   hDll = LoadLibrary("Netapi32.dll"); // win2k
   if(hDll)
   {
   NetShareAdd2k = (NETSHAREADD2K)GetProcAddress(hDll, "NetShareAdd");
   return (NetShareAdd2k != NULL);
   }
   else
  
  
   return false;
   &n

  在Windows中建立一个共享目录,通常是使用NetShareAdd函数.但是在Win2k和Win9x下,这个函数分别是包含在Netapi32.dll和Svrapi.dll中. 那么假如直接在程序中使用Netapi32.lib或Svrapi.lib,在不同的操作系统下运行时会发生找不到xxx函数的输出错误. 解决的办法就是通过GetProcAddress动态获取NetShareAdd.正好ccrun在csdn回答一位网友的问题,顺便写了些代码,在这里贴出来. 注: 1. 以下代码已在Win2k ADV Server和Win9x SE中通过测试.编译时不需要包含lm.h或Svrapi.h,假如包含的话,会引起数据类型重名的错误. 2. 请使用Borland C++ Builder编译器.假如您用VC,个别参数需要改动 代码如下: typedef DWord (WINAPI *NETSHAREADD2K)(LPWSTR, DWORD, LPBYTE, LPDWORD); typedef DWORD (WINAPI *NETSHAREADD9X)(const char FAR*, short, const char FAR*, unsigned short); NETSHAREADD2K NetShareAdd2k; NETSHAREADD9X NetShareAdd9x; bool bWinNT; // 操作系统标志 HINSTANCE hDll; // DLL文件句柄 #define NNLEN 80 // 共享名的长度 #define LM20_NNLEN 12 // LM 2.0 共享名的长度 #define SHPWLEN 8 // 共享密码的长度 #define STYPE_DISKTREE 0 // 磁盘共享 #define SHI50F_FULL 0x0002 #define NERR_SUCcess 0 // 操作成功 #define NERR_BASE 2100 #define NERR_DuplicateShare (NERR_BASE+18) // 共享名称已经存在 #define NERR_RedirectedPath (NERR_BASE+17) // 重定向资源的操作非法 #define NERR_UnknownDevDir (NERR_BASE+16) // 设备或目录不存在 typedef struct _share_info_50 // 用于Win9x { char shi50_netname[LM20_NNLEN+1]; // 共享名 unsigned char shi50_type; // unsigned short shi50_flags; // char FAR * shi50_remark; // ANSI 备注 char FAR * shi50_path; // 共享的资源,也就是共享的目录 char shi50_rw_password[SHPWLEN+1]; // 可读写的密码 char shi50_ro_password[SHPWLEN+1]; // 只读密码 }share_info_50; typedef struct _SHARE_INFO_2 // 用于Win2k { LPWSTR shi2_netname; DWORD shi2_type; LPWSTR shi2_remark; DWORD shi2_permissions; DWORD shi2_max_uses; DWORD shi2_current_uses; LPWSTR shi2_path; LPWSTR shi2_passwd; }SHARE_INFO_2, *PSHARE_INFO_2, *LPSHARE_INFO_2; //--------------------------------------------------------------------------- bool __fastcall InitApi() // 根据操作系统的不同,从Dll中获取API { // 判定系统平台 OSVERSIONINFO info; info.dwOSVersionInfoSize = sizeof(info); GetVersionEx(&info); bWinNT = (info.dwPlatformId == VER_PLATFORM_WIN32_NT)? true: false; if(bWinNT) { hDll = LoadLibrary("Netapi32.dll"); // win2k if(hDll) { NetShareAdd2k = (NETSHAREADD2K)GetProcAddress(hDll, "NetShareAdd"); return (NetShareAdd2k != NULL); } else return false; &n

 
标签: 2k  Win9x  共享  如何  建立  目录  
 
您可以将本页贴到其他网站
UBB代码HTML代码
 
 
 
 
 
 
 更多内容
 ·如何在快速启动栏创建快捷方式 ·如何提高数据库的访问速度 ·如何用BCB做出可移动的菜单? ·如何在BCB中调试Active Form
 ·如何在BCB中使用DirectX ·如何使tcp包和udp包穿透防火墙 ·在ActiveX控件中引入窗体技术 ·More Effective C++:不使用多态
 ·使非MFC窗口程序的窗口回调过程成 ·C++类和接口的设计原则探讨 ·实现LZARI压缩算法的C++类 ·实现关机时的效果的一段代码
 ·实用算法(基础算法-递推法-02) ·上海黑暗之龙--麻将原代码 ·深入VCL理解BCB的消息机制2 ·实现Cookie
 ·十全十美游戏 ·使用Sockets ·使用Windows虚拟设备驱动程序(Vx ·试一下 moving ball
 ·实例解析C++/CLI的“克隆” ·使用C++和XML建立智能文档(三) ·使用CommaText ·全国计算机编程大赛复赛试题2
 
 
最新评论  点此查看所有评论
 
 
 
 
发表评论(支持UBB码)


验证码:  
 
 
 
© 2005- 王朝网络 版权所有