Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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
1-98078
nikolo
2002-09-19 15:15
2002.09.30
TStringList в динамическом массиве


3-97996
dv
2002-09-10 07:57
2002.09.30
проблемы с IBEvent


14-98322
Izyum
2002-09-05 13:10
2002.09.30
Загрузка ОС


14-98262
VEG
2002-09-01 14:19
2002.09.30
Издеваемся над вениками:-)


3-98002
Kurt
2002-09-10 11:40
2002.09.30
Как в CtrlGrid-е отловить событие вставки записи. Ну то есть пере