"我采用的动态调用“netapi32.dll"的方法,编译通过了可是,得不到正确的结果?"
把你的代码贴出来:
函数指针类型的声明;
DLL的装载;
函数指针的获得;
函数的调用.
把你的代码贴出来:
函数指针类型的声明;
DLL的装载;
函数指针的获得;
函数的调用.
解决方案 »
- 怎么用控件将DBGrid中的数据导入Excel中
- Showmodal为何单独建立一个消息循环的问题
- 如何获取网页内容?
- Google上现在已经不能搜索到关于“南京大屠杀”的消息了
- 求助,各位大哥我下面这种功能,能不能实现?谢谢!
- 如何用indy得FTP取得远程目录下文件得最后修改时间啊
- 数据库备份的问题,请各位多多帮忙呀!
- 要在Delphi中实现类似于HTML中的OnMouseOver、OnMouseOut事件该如何办?
- 下载了ehlib软件包可不知道怎么用,高分求救!
- 取sql server的查询结果?
- 各位大侠快帮帮我。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 /
\_/