![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не вызывается метод из Rapi.dll [D6]
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;
Итак. какая у тя ошибка?