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

解决方案 »

  1.   

    //---------------------------------------------------------------------------#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_re;
        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_re = 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
      

  2.   

    这两个函数并非没有被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_re = 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
    }
      

  3.   

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

  4.   

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