Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Не вызывается метод из Rapi.dll [D6]


Страницы:   1 2

PolarS ©   (2003-10-13 19:17:00) 

Не получается выполнить метод из Rapi.dll
Пишу так:

type
_SECURITY_ATTRIBUTES = record
nLength: DWORD;
lpSecurityDescriptor: Pointer;
bInheritHandle: boolean;
end;
LPSECURITY_ATTRIBUTES = ^_SECURITY_ATTRIBUTES;

TCeCreateFile = function (lpFileName: string; dwDesiredAccess: DWORD; dwShareMode: DWORD;
lpSecurityAttributes:LPSECURITY_ATTRIBUTES; dwCreationDistribution: DWORD;
dwFlagsAndAttributes: DWORD; hTemplateFile: Pointer): THandle; StdCall;

EDLLLoadError = class(Exception);

procedure TForm1.Button1Click(Sender: TObject);
var Handle, hDest: THandle;
CeCreateFile: TCeCreateFile;
begin
Handle:= LoadLibrary("D:\rapi.dll");
try
if Handle = 0 then
raise EDLLLoadError.Create("Can not load DLL.");
@CeCreateFile:= GetProcAddress(Handle, "CeCreateFile");
if not (@CeCreateFile = nil) then
begin
hDest:= CeCreateFile("\test.dat",GENERIC_WRITE,FILE_SHARE_READ,nil,CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, nil);
if (INVALID_HANDLE_VALUE = hDest ) then RaiseLastWin32Error;
end
else RaiseLastWin32Error;
finally
FreeLibrary(Handle);
end;
end;

Ошибка такая: SystemError.Code 1447. Окно не имеет полос прокрутки.
Подскажите, что я не так делаю.
Заранее благодарен.


jack128   (2003-10-14 11:23:00) [21]

Тогда не чем не могу помочь... у мя все работает..


sirius   (2003-10-14 11:08:00) [22]

Файл "\sample.xml" точно на месте.


jack128   (2003-10-14 11:05:00) [23]


> Системе не удается найти указанный файл
B какой из этого ты сделал вывод? ;-))


sirius   (2003-10-14 10:59:00) [24]

WinCe Error.Code 2. Системе не удается найти указанный файл


jack128   (2003-10-14 10:51:00) [25]

Какую ошибку выдает CeDeleteFile ?? CeGetLastError - что выдает???


sirius   (2003-10-14 10:47:00) [26]

Проверку я делаю hRapiResult = S_OK.
A путь простоя укоротил "C:\WINNT\system32\rapi.dll".
Пробовал еще так:
type
TCeRapiInit = function (): HResult; stdcall;
TCeRapiUninit = function (): HResult; stdcall;
TCeDeleteFile = function (lpFileName: string): boolean; stdcall;
...
begin
Handle:= LoadLibrary("C:\WINNT\system32\rapi.dll");
try
if Handle = 0 then
raise EDLLLoadError.Create("Can not load DLL.");
@CeRapiInit:= GetProcAddress(Handle, "CeRapiInit");
if not (@CeRapiInit = nil) then
begin
hRapiResult:= CeRapiInit();
if (hRapiResult = S_OK) then begin
ShowMessage("CeRapiInit is Ok.");
@CeDeleteFile:= GetProcAddress(Handle, "CeDeleteFile");
if not (@CeDeleteFile = nil) then begin
res:= CeDeleteFile("\sample.xml");
if (res) then ShowMessage("CeDeleteFile is Ok.")
else ShowMessage("CeDeleteFile is not Ok.");
@CeRapiUnInit:= GetProcAddress(Handle, "CeRapiUnInit");
if not (@CeRapiUnInit = nil) then begin
hRapiResult:= CeRapiUnInit();
if (hRapiResult = S_OK) then ShowMessage("CeRapiUnInit is Ok.")
else ShowMessage("CeRapiUnInit is not Ok.");
end;
end
else
RaiseLastWin32Error;
end
else ShowMessage("CeCreateFile is not Ok.");
end
else
RaiseLastWin32Error;
finally
FreeLibrary(Handle);
end;
end;

CeRapiInit проходит, а CeDeleteFile нет.


jack128   (2003-10-14 10:37:00) [27]

где проверка hRapiResult ?
if hRapiResult = E_FAIL then
raise Exception.Create("Хана");

кстати как ты запихнул rapi.dll в корень d:\?
Может актив синг ее(rapi.dll) просто не находит??


PolarS   (2003-10-14 10:27:00) [28]

Я попробовал сделать по-проще:

function CeRapiInit(): HResult; stdcall; external "RAPI.DLL" index 74; //name "CeRapiInit";
function CeRapiUninit(): HResult; stdcall; external "RAPI.DLL" index 77; //name "CeRapiUninit";
function CeDeleteFile(lpFileName: string): boolean; stdcall; external "RAPI.DLL" index 36; //name "CeDeleteFile";

procedure TForm1.Button2Click(Sender: TObject);
var hRapiResult: HRESULT;
LastError: DWORD;
Error: EWin32Error;
begin
hRapiResult:= CeRapiInit();
if (CeDeleteFile("\sample.xml")) then ShowMessage("Delete is Ok.")
else ShowMessage("Delete is not Ok.");
hRapiResult:= CeRapiUnInit();
end;
При этом всегда "Delete is not Ok." ???
Так можно???


jack128   (2003-10-13 20:45:00) [29]

Ха.. туплю я :-)) Все тривиально.. Ты не инициализируешь RAPI

см CeRapiInit и CeRapiInitEx


jack128   (2003-10-13 19:47:00) [30]

Ошибка не та. Для Rapi ошибка вызывается примерно так.

resourcestring

SWinCEError = "WinCE Error. Code: %d."#10"%s";
SUnkWinCEError = "A WinCE API function failed";

type
EWinCEError = class(EWin32Error);

procedure RaiseLastWinCEError;
var
LastError: DWORD;
Error: EWin32Error;
begin
LastError := CeGetLastError;
if LastError <> ERROR_SUCCESS then
Error := EWinCEError.CreateResFmt(@SWinCEError, [LastError,
SysErrorMessage(LastError)])
else
Error := EWinCEError.CreateRes(@SUnkWinCEError);
Error.ErrorCode := LastError;
raise Error;
end;

Итак. какая у тя ошибка?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо