Помогите перевести следующие строки кода из С++ в Delphi. То есть у меня возникла проблема с типами данных и некоторыми функциями. Заранее спасибо. Code: void GetHashStr([COLOR=Green]wchar_t*[/COLOR] Password,char *HashStr) Code: CryptHashData(hHash, [COLOR=Green](unsigned char*)[/COLOR]Password, ([COLOR=Green]wcslen[/COLOR](Password)+1)*2); Code: [COLOR=Green]char TmpBuf[128];[/COLOR] Code: [COLOR=Green]wsprintf(TmpBuf,”%s%2.2X”, HashStr, c);[/COLOR] // c это unsigned char
Code: void GetHashStr([COLOR=Green]wchar_t*[/COLOR] Password,char *HashStr) PHP: Procedure GetHashStr(Password:PWideChar; HashStr:char) Code: CryptHashData(hHash, [COLOR=Green](unsigned char*)[/COLOR]Password, ([COLOR=Green]wcslen[/COLOR](Password)+1)*2); Это взял из своей функции: PHP: var Password:string; ... CryptHashData(hHash, PByte(Password), length(Password), 0) в Си варианте предлагают length(Password)*2 Code: [COLOR=Green]char TmpBuf[128];[/COLOR] PHP: var TmpBuf:Char[0..128]; Code: [COLOR=Green]wsprintf(TmpBuf,”%s%2.2X”, HashStr, c);[/COLOR] // c это unsigned char Наверное так: PHP: Format('%2.2x', [Ord(PChar(HashStr)[I])]); P.s. Как я понял это CryptApi.
Да это из тех степей. Я перевожу функцию для дешифровки логина-пароля из Интернет Експлоера. Если все получиться - выложу тут готовый вариант. Password: PWideChar; А далее ты пишешь var Password: string; Password берется из параметра первой процедуры. Все остальные функции вызываются в ней.
Последнее дословно, наверное будет так: PHP: function wsprintfA(buf: pchar; format:pchar; param:char):integer; cdecl; external user32 name 'wsprintfA'; function Jord(I:Char):String; var buf : array[0..255] of char; begin wsprintfA(buf, '%2.2x', i); result:=buf; end; применять просто в цикле: str:=str+Jord(TmpBuf); P.s. Спасибо SLESH дал в свое время мне эти функции
1) void GetHashStr(wchar_t* Password, char *HashStr) - это Procedure GetHashStr(PasswordWideChar; HashStrchar) // про * незабываем ) 2) CryptHashData(hHash, (unsigned char*)Password, (wcslen(Password)+1)*2); Тут считается кол-во символов расширенной строки + символ конца строки (0x00) и умножается на 2 чтобы узнать длинну в байтах. По этому более корректно будет так: CryptHashData(hHash, PByte(Password), (length(Password)+1)*2, 0)