![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Точка входа в проц-у ConvertToGlobalHandle не найден в kernel32 [D7, WinXP]
Shlomo © (2006-10-27 10:12:00)Здравствуйте!
Подскажите, пожалуйста, в чём тут проблема.
Программа выдаёт ошибку «"Точка входа в процедуру ConvertToGlobalHandle не найден в библиотеке DLL KERNEL32.dll"»
Программа для открытия и закрытия сетевых ресурсов. Скачал с delphikingdom.ru
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls ;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
//подключаем две функции из библиотеки svrapi.dll
Function NetShareAdd(Servername : PChar; Level : Integer; Buffer : Pointer;
BufferSize : Integer) : Integer; stdcall; external 'svrapi.dll';
Function NetShareDel(Servername : PChar; NetName : PChar; Reserved:DWORD): DWORD;
stdcall; external 'svrapi.dll';
//необходимые константы
const
{см. LmCons.pas}
LM20_NNLEN = 12;
SHPWLEN = 8;
SHI50F_RDONLY = 1;
SHI50F_FULL = 2;
STYPE_DISKTREE = 0;
SHI50F_PERSIST = $0100;
SHI50F_SYSTEM = $0200;
{см. LmErr.pas}
NERR_BASE = 2100;
NERR_NetNotStarted = NERR_BASE+2;
NERR_UnknownServer = NERR_BASE+3;
NERR_ServerNotStarted = NERR_BASE+14;
NERR_UnknownDevDir = NERR_BASE+16;
NERR_RedirectedPath = NERR_BASE+17;
NERR_DuplicateShare = NERR_BASE+18;
NERR_BufTooSmall = NERR_BASE+23;
NERR_NetNameNotFound = NERR_BASE+210;
NERR_InvalidComputer = NERR_BASE+251;
NERR_ShareNotFound = NERR_BASE+292;
//формируем тип для записи с необходимыми параметрами
Type
TShareInfo50 = Record
shi50_netname: Array[0..LM20_NNLEN] Of Char; //сетевое имя
shi50_type: Byte; //тип ресурса
shi50_flags: Short; //флаг доступа
shi50_remark: PChar; // комментарий
shi50_path: PChar; // путь к ресурсу
shi50_rw_password: Array[0..SHPWLEN] Of Char;//пароль полного доступа
shi50_ro_password: Array[0..SHPWLEN] Of Char;//пароль "только чтение" доступа
End; {Record}
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
Var
info50: TShareInfo50;
rc, cb: Integer;
ServerName, Path, NetName, ErrMes, ErrCap, Comment:String;
MessIconBtn:Byte;
begin
//установим необходимые параметры
ServerName:='';
Path:='C:\TEMP';
NetName:='TEST';
Comment:='This is a network machine''s commentary';
//заполним буфер
FillChar(info50, sizeof(info50), 0);
With info50 Do
Begin{With}
StrCopy(shi50_netname, PChar(NetName)); //сетевое имя
shi50_type := STYPE_DISKTREE; //подключать будем диск
shi50_remark:=PChar(Comment); //комментарий
shi50_flags:= SHI50F_RDONLY OR SHI50F_FULL //доступ определяется паролем
OR SHI50F_PERSIST;//и пишется в Registry
shi50_path:=PChar(Path); //путь
StrPCopy(shi50_rw_password,'ASDF'); //пароль для полного доступа
StrPCopy(shi50_ro_password,'QWE'); // пароль для "только чтение"
End;{With}
//установим размер буфера
cb := sizeof(info50);
//основная функция
rc := NetShareAdd(PChar(ServerName), 50, @info50, cb);
//сформируем текст сообщений об успехе или ошибках
ErrMes:='Доступ к устройству "'+NetName+'" открыт!';
ErrCap:='Все в порядке!';
MessIconBtn:=MB_OK OR MB_ICONINFORMATION;
//проверка ошибок
If rc <> 0 Then
Begin {ошибка}
ErrCap:='Ошибка!';
MessIconBtn:=MB_OK OR MB_ICONERROR;
Case rc Of
//расшифровка ошибок
ERROR_NOT_ENOUGH_MEMORY : ErrMes:='Недостаточно памяти';
ERROR_BAD_NETPATH : ErrMes:='"'+Servername+ '" - неверное сетевое имя!';
ERROR_NETNAME_DELETED : ErrMes:='Сетевой ресурс более недоступен';
ERROR_NETWORK_ACCESS_DENIED: ErrMes:='Отсутствует доступ к сети';
ERROR_BAD_DEV_TYPE : ErrMes:='Неверный тип сетевого ресурса';
ERROR_BAD_NET_NAME : ErrMes:='Не найдено сетевое имя';
ERROR_INVALID_PARAMETER : ErrMes:='Неверный параметр';
ERROR_INVALID_LEVEL : ErrMes:='Неверный уровень администрирования';
NERR_InvalidComputer:ErrMes:='Неверное имя компьютера!';
NERR_UnknownServer:ErrMes:='Неизвестный сервер!';
NERR_UnknownDevDir:ErrMes:='Устройство "'+Path+'" отсутствует!';
NERR_ServerNotStarted:ErrMes:='Сервер не работает!';
NERR_RedirectedPath:ErrMes:='Переназначенный путь!';
NERR_DuplicateShare:ErrMes:='Сетевое имя "'+NetName+'" уже существует!';
NERR_BufTooSmall:ErrMes:='Слишком маленький буфер для данных!';
Else
End; {Case}
End; {ошибка}
//выдадим сообщение
MessageBox(Application.Handle,PChar(ErrMes),PChar(ErrCap),MessIconBtn);
end;
procedure TForm1.Button2Click(Sender: TObject);
Var
rc:DWord;
Servername,NetName, ErrMes, ErrCap:String;
MessIconBtn:Byte;
begin
ServerName:='';
NetName:='TEST';
rc:=NetShareDel(PChar(ServerName),PChar(NetName),0);
ErrMes:='Доступ к устройству "'+NetName+'" закрыт!';
ErrCap:='Все в порядке!';
MessIconBtn:=MB_OK OR MB_ICONINFORMATION;
If rc <> 0 Then
Begin {ошибка}
//ошибка
ErrCap:='Ошибка!';
MessIconBtn:=MB_OK OR MB_ICONERROR;
Case rc Of
//расшифровка ошибок
ERROR_BAD_NETPATH:ErrMes:='"'+Servername+ '" - неверное сетевое имя!';
ERROR_INVALID_PARAMETER:ErrMes:='Неверный параметр!';
NERR_NetNotStarted:ErrMes:='Сеть недоступна!';
NERR_ServerNotStarted:ErrMes:='Сервер не работает!';
NERR_NetNameNotFound:ErrMes:='Устройство не существует!';
NERR_ShareNotFound:ErrMes:='Сетевое имя "'+NetName+'" не найдено!';
Else
//смотри ошибки для NetShareAdd или
ErrMes:='Неизвестная сетевая ошибка!';
End; {Case}
End;{ошибка}
MessageBox(Application.Handle,PChar(ErrMes),PChar(ErrCap),MessIconBtn);
end;
end.
Shlomo (2006-10-27 10:45:00) [1]
> svrapi.dll - это для Win9x
>
> Для НТ - NetApi32.dll
>
Спасибо, исправил!
Эта ошибка не появляется, но программа всё равно не работает.
Сергей М. (2006-10-27 10:33:00) [2]
> Elen © (27.10.06 10:27) [2]
В НТ-системах этой библ-ки нет, вместо нее фигурирует NetApi32.dll.
Автор просто невнимательно отнесся к комментариям по ОС-платформе, когда передирал код.
Сергей М. (2006-10-27 10:27:00) [3]svrapi.dll - это для Win9x
Для НТ - NetApi32.dll
Elen (2006-10-27 10:27:00) [4]
> svrapi.dll
А где лежит эта библи-отика?