CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  Windows SDK/API

在C++Builder中调用没有被宝兰封装的API怎么办?

楼主dingfuhai(loading)2002-05-25 12:37:50 在 Delphi / Windows SDK/API 提问

我用Delphi调用NetShareAdd,添加网络共享的API(该函数没有被封装),可以正常执行,可再C++Builder中不能运行?我采用的动态调用“netapi32.dll"的方法,编译通过了可是,得不到正确的结果?请大虾指教 问题点数:100、回复次数:6Top

1 楼plainsong(短歌)()回复于 2002-05-25 13:25:21 得分 0

"我采用的动态调用“netapi32.dll"的方法,编译通过了可是,得不到正确的结果?"  
  把你的代码贴出来:  
  函数指针类型的声明;  
  DLL的装载;  
  函数指针的获得;  
  函数的调用.Top

2 楼plainsong(短歌)()回复于 2002-05-25 13:26:22 得分 0

你怎么一个问题贴了两个?快删除一个吧.Top

3 楼dingfuhai(loading)回复于 2002-05-26 01:06:38 得分 0

//---------------------------------------------------------------------------  
   
  #ifndef   Unit1H  
  #define   Unit1H  
  //---------------------------------------------------------------------------  
  #include   <Classes.hpp>  
  #include   <Controls.hpp>  
  #include   <StdCtrls.hpp>  
  #include   <Forms.hpp>  
  #include   <Sysinit.hpp>  
  #include   <FileCtrl.hpp>  
  #include   <AccCtrl.hpp>  
   
  //---------------------------------------------------------------------------  
   
  class   TForm1   :   public   TForm  
  {  
  __published: //   IDE-managed   Components  
                  TButton   *Button1;  
                  TLabel   *Label1;  
                  TButton   *Button2;  
                  void   __fastcall   Button1Click(TObject   *Sender);  
                  void   __fastcall   Button2Click(TObject   *Sender);  
  private: //   User   declarations  
  public: //   User   declarations  
                  __fastcall   TForm1(TComponent*   Owner);  
  };  
   
  typedef   struct   _SHARE_INFO_502   {  
          LPTSTR         shi502_netname;  
          DWORD           shi502_type;  
          LPTSTR         shi502_remark;  
          DWORD           shi502_permissions;  
          DWORD           shi502_max_uses;  
          DWORD           shi502_current_uses;  
          LPTSTR         shi502_path;  
          LPTSTR         shi502_passwd;  
          DWORD           shi502_reserved;  
          PSECURITY_DESCRIPTOR     shi502_security_descriptor;  
  }   SHARE_INFO_502,   *PSHARE_INFO_502,   *LPSHARE_INFO_502;  
   
   
  extern   "C"   __declspec(dllimport)   unsigned   int   __stdcall   NetShareAdd   (LPTSTR   servername,   DWORD   level,   LPBYTE   buf,  
                  LPDWORD   parm_err   );  
  extern   "C"   __declspec(dllimport)   unsigned   int   __stdcall   NetShareDel   (   LPTSTR   servername,  
          LPTSTR   netname,  
          DWORD   reserved);  
  unsigned   int     NetShare(String   ShareName,   String   ShareDir);  
  unsigned   int   UnNetShare(String   ShareName);  
   
  //---------------------------------------------------------------------------  
  extern   PACKAGE   TForm1   *Form1;  
  //---------------------------------------------------------------------------  
  unsigned   int   UnNetShare(String   ShareName)  
  {  
      return   NetShareDel(NULL,ShareName.c_str(),0);  
  }  
  unsigned   int   NetShare(String   ShareName,   String   ShareDir)  
  {  
   
   
        SHARE_INFO_502   si;  
        char                   *   ServerName;  
        ServerName   =   "";  
        si.shi502_netname   =   ShareName.c_str();  
        si.shi502_type   =   0;  
        si.shi502_remark   =   NULL;  
        si.shi502_permissions   =   0;  
        si.shi502_max_uses   =   -1;  
        si.shi502_current_uses   =   10;  
        si.shi502_path   =     ShareDir.c_str()   ;  
        si.shi502_passwd   =   NULL;  
        si.shi502_reserved   =   0;  
        si.shi502_security_descriptor   =   NULL;  
        unsigned   int   r=0;  
        r=NetShareAdd(LPTSTR(ServerName),DWORD(502),LPBYTE(&si),0);  
   
        return   r;  
  }  
  #endif  
  Top

4 楼plainsong(短歌)()回复于 2002-05-26 10:51:09 得分 0

上了你一大当:你明明用的是静态连接!  
  Top

5 楼plainsong(短歌)()回复于 2002-05-27 10:59:10 得分 100

这两个函数并非没有被BCB封装,你只要Einclude   <lm.h>就行了.  
  在WIN   NT和WIN   2K下,这两个函数中用到的所有字符串都是Unicode字符串.  
  我把你的代码改了一下,现在可以用了:  
  //NetShare.h:  
  unsigned   int     NetShare(WideString   ShareName,   WideString   ShareDir);  
  unsigned   int   UnNetShare(WideString   ShareName);  
   
  //NetShare.cpp:  
  #include   <lm.h>  
  #include   "NetShare.h"  
   
  unsigned   int   UnNetShare(WideString   ShareName)  
  {  
      return   NetShareDel(NULL,ShareName.c_bstr(),0);  
  }  
  unsigned   int   NetShare(WideString   ShareName,   WideString   ShareDir)  
  {  
   
      DWORD   Err;  
      SHARE_INFO_502   si;  
      LPWSTR   ServerName;  
      ServerName   =   NULL;  
      si.shi502_netname   =   ShareName.c_bstr();  
      si.shi502_type   =   STYPE_DISKTREE;   //   disk   drive  
      si.shi502_remark   =   NULL;  
      si.shi502_permissions   =   0;  
      si.shi502_max_uses   =   -1;  
      si.shi502_current_uses   =   10;  
      si.shi502_path   =ShareDir.c_bstr();  
      si.shi502_passwd   =   NULL;   //   no   password  
      si.shi502_reserved   =   0;  
      si.shi502_security_descriptor   =   NULL;  
      unsigned   int   r=0;  
      r=NetShareAdd(ServerName,DWORD(2),LPBYTE(&si),&Err);  
   
      return   r;  
  }  
   
  //调用:  
  void   __fastcall   TForm1::Button1Click(TObject   *Sender)  
  {  
  NetShare("TestE","E:\\DOC");0D }  
   
  Top

6 楼dingfuhai(loading)回复于 2002-05-28 08:57:17 得分 0

我试试,怎么才知道API包含在那个头文件里,需要那个lib,dll?  
  对于这个函数我能不能用动态调用netapi32.dll,(用Loadlibrary)调用呢?Top

7 楼plainsong(短歌)()回复于 2002-05-28 17:20:41 得分 0

BCB的头文件一般和VC的头文件是一样的(C++标准库和Windows   API的头文件是这样的).  
  在MSDN中,NetShareAdd的帮助的末尾写着呢.  
  在BCB的Windows   SDK帮助的NetShareAdd帮助中也有,点击上面的Quick   Info按扭...  
   
            ?????????????  
            ____           ____  
            \   p   \       /   g   /  
              \   l   \_/   n   /  
                \   a       o   /  
                  \   i   s   /  
                    \   n   /  
                      \_/  
  Top

相关问题

  • C调用C#?
  • 在C++ Builder中调用外部程序
  • c++builder内如何调用汇编???????????
  • c++ builder 如何调用 win api 函数
  • 简单调用DLL函数C++ Builder !
  • C++ Builder 调用xml,老是报错
  • c++ builder 怎么调用IE浏览器?
  • c++调用perl
  • C#调用C++类
  • C++ builder 中有象VC中CList的那种封装链表吗?

关键词

  • c++builder
  • 函数
  • 文件
  • shi502
  • 调用
  • netshare
  • netshareadd
  • sharename
  • si
  • widestring

得分解答快速导航

  • 帖主:dingfuhai
  • plainsong

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo