在C++Builder中调用没有被宝兰封装的API怎么办? "我采用的动态调用“netapi32.dll"的方法,编译通过了可是,得不到正确的结果?"把你的代码贴出来:函数指针类型的声明;DLL的装载;函数指针的获得;函数的调用. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 //---------------------------------------------------------------------------#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 declarationspublic: // 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 这两个函数并非没有被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} 我试试,怎么才知道API包含在那个头文件里,需要那个lib,dll?对于这个函数我能不能用动态调用netapi32.dll,(用Loadlibrary)调用呢? BCB的头文件一般和VC的头文件是一样的(C++标准库和Windows API的头文件是这样的).在MSDN中,NetShareAdd的帮助的末尾写着呢.在BCB的Windows SDK帮助的NetShareAdd帮助中也有,点击上面的Quick Info按扭... ????????????? ____ ____ \ p \ / g / \ l \_/ n / \ a o / \ i s / \ n / \_/ IWDBMemo保存问题 一个编辑框中内容显示的问题. ADO参数与MIDAS传递问题,请高手帮忙 请问哪里有关于Gexperts的使用方法下载?在线等候。谢谢帮助,有分敬上。 那位前辈用过CODEWARP,这东西做什么的,好用吗 如何让用DELPHI做的程序在程序运行是显示一个图片?就比如DELPHI5的启动画面 发布Delphi编制程序的版本问题 有关interface和dispinterface 50分!SQL的问题,怎样动态获得数据库名? 还没有人解决过这个问题! 各位大侠快帮帮我。help!!!!!!!!!!!!!!!!! 在delphi中应用汇编 程序如使系统时钟变慢
#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
在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
}
对于这个函数我能不能用动态调用netapi32.dll,(用Loadlibrary)调用呢?
在MSDN中,NetShareAdd的帮助的末尾写着呢.
在BCB的Windows SDK帮助的NetShareAdd帮助中也有,点击上面的Quick Info按扭... ?????????????
____ ____
\ p \ / g /
\ l \_/ n /
\ a o /
\ i s /
\ n /
\_/