Текущий архив: 2002.09.30;
Скачать: CL | DM;
Вниз
Создание интерфейса DLL библиотеки Найти похожие ветки
← →
Magistr2 © (2002-08-14 22:33) [0]Мне понадобилось использовать функцию WinApi NetShareAdd, но соответствующего интерфейса я так и не нашел. Попытался написать свой, тросидел целый день и ни как не могу понять что не правильно. Помогите!!!!
Вот Исходники:
Это обычный exe`шник на форме лежит кнопка.
unit main;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
const
STYPE_DISKTREE = 0; // disk share
STYPE_PRINTQ = 1; // printer share
STYPE_DEVICE = 2;
STYPE_IPC = 3;
ACCESS_READ = $1;
ACCESS_WRITE = $2;
ACCESS_CREATE = $4;
ACCESS_EXEC = $8;
ACCESS_DELETE = $10;
ACCESS_ATRIB = $20;
ACCESS_PERM = $40;
ACCESS_ALL = (ACCESS_READ or ACCESS_WRITE or ACCESS_CREATE or ACCESS_EXEC or ACCESS_DELETE or ACCESS_ATRIB or ACCESS_PERM);
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
PShare=^Share_Info_2;
Share_Info_2 = Record
shi2_netname:LPWSTR;
shi2_type:DWORD;
shi2_remark:LPWSTR;
shi2_permissions:DWORD;
shi2_max_uses:DWORD;
shi2_current_uses:DWORD;
shi2_path:LPWSTR;
shi2_passwd:LPWSTR;
End;
TNetShareAdd=Function(servername:LPWSTR; level:DWORD; buf:PShare; parm_err:integer):integer; stdcall;
var
Form1: TForm1;
iNetShareAdd : TNetShareAdd;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
var
dllHandler : THandle;
p:Share_Info_2;
a:Integer;
err:Integer;
begin
dllHandler := 0;
dllHandler := LoadLibrary("netapi32.dll");
If dllHandler=0 then
Application.MessageBox(PChar(IntToStr(GetLastError())),"Error",MB_OK)
else @iNetShareAdd := getProcAddress( dllHandler, "NetShareAdd" );
p.shi2_netname:="";
p.shi2_type:=STYPE_DISKTREE;
p.shi2_remark:="";
p.shi2_permissions:=0;
p.shi2_max_uses:=4;
p.shi2_current_uses:=0;
p.shi2_path:="d:\";
p.shi2_passwd:="";
err:=iNetShareAdd("",2,@p,a);
Application.MessageBox(PChar(IntToStr(a)),"a",MB_OK);
Application.MessageBox(PChar(IntToStr(err)),"NetShareAdd",MB_OK);
Application.MessageBox(PChar(IntToStr(GetLastError())),"GetLastError",MB_OK);
freeLibrary(dllHandler);
end;
end.
← →
Raptor © (2002-08-14 23:42) [1]Попробуй такой интерфейс:
unit NetShareAddInterface;
interface
Uses Windows;
Const
STYPE_DISKTREE = 0;
{$EXTERNALSYM STYPE_PRINTQ}
STYPE_PRINTQ = 1;
{$EXTERNALSYM STYPE_DEVICE}
STYPE_DEVICE = 2;
{$EXTERNALSYM STYPE_IPC}
STYPE_IPC = 3;
{$EXTERNALSYM STYPE_SPECIAL}
STYPE_SPECIAL = $80000000;
{$EXTERNALSYM ACCESS_NONE}
ACCESS_NONE = 0;
{$EXTERNALSYM ACCESS_READ}
ACCESS_READ = $01;
{$EXTERNALSYM ACCESS_WRITE}
ACCESS_WRITE = $02;
{$EXTERNALSYM ACCESS_CREATE}
ACCESS_CREATE = $04;
{$EXTERNALSYM ACCESS_EXEC}
ACCESS_EXEC = $08;
{$EXTERNALSYM ACCESS_DELETE}
ACCESS_DELETE = $10;
{$EXTERNALSYM ACCESS_ATRIB}
ACCESS_ATRIB = $20;
{$EXTERNALSYM ACCESS_PERM}
ACCESS_PERM = $40;
{$EXTERNALSYM ACCESS_GROUP}
ACCESS_GROUP = $8000;
{$EXTERNALSYM ACCESS_ALL}
ACCESS_ALL = ACCESS_READ or ACCESS_WRITE or ACCESS_CREATE or ACCESS_EXEC or
ACCESS_DELETE or ACCESS_ATRIB or ACCESS_PERM;
Type
PShareInfo2 = ^TShareInfo2;
{$EXTERNALSYM _SHARE_INFO_2}
_SHARE_INFO_2 = record
shi2_netname: LPTSTR;
shi2_type: DWORD;
shi2_remark: LPTSTR;
shi2_permissions: DWORD;
shi2_max_uses: DWORD;
shi2_current_uses: DWORD;
shi2_path: LPTSTR;
shi2_passwd: LPTSTR;
end;
TShareInfo2 = _SHARE_INFO_2;
{$EXTERNALSYM SHARE_INFO_2}
SHARE_INFO_2 = _SHARE_INFO_2;
function NetShareAdd(servername: LPTSTR; level: DWORD; const buf: Pointer;
parm_err: PDWORD): DWORD; stdcall;
{$EXTERNALSYM NetShareAdd}
implementation
const
netapi32lib = "netapi32.dll";
function NetShareAdd; external netapi32lib name "NetShareAdd";
end.
Страницы: 1 вся ветка
Текущий архив: 2002.09.30;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.02 c