Использование CeRapiInvoke() из rapi.dll

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Использование CeRapiInvoke() из rapi.dll

Сообщение AHgpuXa » 25.10.2010 12:12:41

Доброго времени суток.
Стоит задача с ПК(win ХЗ) на КПК (win CE) установить время по ActiveSync.
Смотру в сторону rapi.dll и ее ф-ции CeRapiInvoke().

объявил функцию.
function CeRapiInvoke(pDllPath: LPCWSTR; pFunctionName: LPCWSTR; cbInput: DWord; pInput: PByte; pcbOutput: PDWord; ppOutput: PPByte; ppIRAPIStream: PIRAPIStream; dwReserved: DWord): HResult; external 'rapi.dll';

Procedure SetPDATime();
var
localTime:TSystemTime;
hr:HRESULT;
DllPath,FunctionName:string;
pDllPath,pFunctionName:LPCWSTR;
cbInput: DWord;
pInput: PByte;
pcbOutput: PDWord;
ppOutput: PPByte;
ppIRAPIStream: PIRAPIStream;
dwReserved: DWord;
begin
DllPath:='coredll.dll';
FunctionName:='SetLocalTime';

pDllPath:=@DllPath;
pFunctionName:=@FunctionName;
GetLocalTime(localTime);

cbInput:=SizeOf(localTime);
pInput:=@localTime;
If not Rapi_Start(true) Then Exit;
try
hr:=CeRapiInvoke(pDllPath,pFunctionName,cbInput,pInput,@pcbOutput,@ppOutput,ppIRAPIStream,0);
showmessage('Результат '+inttostr(hr));
except
end;
end;

в результате возвращает -2147024809. Ткните носом плиз что я делаю не так. Может есть пример рабочий.
Спасибо.
AHgpuXa
незнакомец
 
Сообщения: 2
Зарегистрирован: 22.09.2010 14:42:52

Re: Использование CeRapiInvoke() из rapi.dll

Сообщение AHgpuXa » 27.10.2010 20:24:10

Методом проб и ошибок пришел к такому:
function CeRapiInvoke(pDllPath: LPCWSTR; pFunctionName: LPCWSTR; cbInput: DWord; pInput: PByte;var pcbOutput: PDWord;var ppOutput: PPByte; ppIRAPIStream: PIRAPIStream; dwReserved: DWord): HResult; stdcall; external 'rapi.dll';

Пытаюсь вызывать различные ф-ции:
1) ф-ция PlaySoundW().

Код: Выделить всё
Procedure PlayS();
type
Tparam = record
pszSound: PWideChar;
hmod: HMODULE;
fdwSound: DWORD
end;
Var
param:TParam;
hr:HRESULT;
cbInput: DWord;
pInput: PByte;
pcbOutput: PDWord;
ppOutput: PPByte;
ppIRAPIStream: PIRAPIStream;
Begin
param.pszSound:= 'windows\beep.wav';
param.hmod:=0;
param.fdwSound:=SND_ASYNC;
cbInput:=SizeOf(Param);
pInput:=@Param;
If not Rapi_Start(true) Then Exit;
try
hr:=CeRapiInvoke('coredll.dll','PlaySoundW',cbInput,pInput,pcbOutput,ppOutput,nil,0);
showmessage('Результат '+inttostr(hr) + ' ошибка '+Inttostr(CeGetLastError()));
except
showmessage('E Результат '+inttostr(hr) + ' ошибка '+Inttostr(CeGetLastError()));
end;
end;


в результате hr=0, GetLastError() = 87

2) ф-ция SipShowIM

Код: Выделить всё
Procedure ShowSip();
const
SIPF_OFF    =   $00000000;
SIPF_ON     =   $00000001;
SIPF_DOCKED =   $00000002;
SIPF_LOCKED =   $00000004;
var
hr:HRESULT;
cbInput: DWord;
pInput: PByte;
pcbOutput: PDWord;
ppOutput: PPByte;
ppIRAPIStream: PIRAPIStream;
IPStatus:DWORD;
begin
IPStatus:= SIPF_ON;
cbInput:= SizeOf(IPStatus);
pInput:=@IPStatus;
ppIRAPIStream:=nil;
If not Rapi_Start(true) Then Exit;
try
hr:=CeRapiInvoke('coredll.dll','SipShowIM',cbInput,pInput,pcbOutput,ppOutput,ppIRAPIStream,0);
showmessage('Результат '+inttostr(hr) + ' ошибка '+Inttostr(CeGetLastError()));
except
showmessage('E Результат '+inttostr(hr) + ' ошибка '+Inttostr(CeGetLastError()));
end;
end;


в результате hr=1, GetLastError() = 0

3) ф-ция SetPDATime()

Код: Выделить всё
Procedure SetPDATime();
var
localTime:TSystemTime;
hr:HRESULT;
cbInput: DWord;
pInput: PByte;
pcbOutput: PDWord;
ppOutput: PPByte;
ppIRAPIStream: PIRAPIStream;
dwReserved: DWord;
IPStatus:DWORD;
begin
GetLocalTime(localTime);
cbInput:=SizeOf(localTime);
pInput:=@localTime;
ppIRAPIStream:=nil;

If not Rapi_Start(true) Then Exit;
try
hr:=CeRapiInvoke('coredll.dll','SetLocalTime',cbInput,pInput,pcbOutput,ppOutput,ppIRAPIStream,0);
showmessage('Результат '+inttostr(hr) + ' ошибка '+Inttostr(CeGetLastError()));
except
showmessage('E Результат '+inttostr(hr) + ' ошибка '+Inttostr(CeGetLastError()));
end;
end;


в результате hr=229216, GetLastError() = 1064
Не один из вариантов не дал положительного результата :(
AHgpuXa
незнакомец
 
Сообщения: 2
Зарегистрирован: 22.09.2010 14:42:52


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 51

Рейтинг@Mail.ru