Просмотр полной версии : Перевести из С++ в Delphi
Помогите перевести следующие строки кода из С++ в Delphi. То есть у меня возникла проблема с типами данных и некоторыми функциями. Заранее спасибо.
void GetHashStr(wchar_t* Password,char *HashStr)
CryptHashData(hHash, (unsigned char*)Password, (wcslen(Password)+1)*2);
char TmpBuf[128];
wsprintf(TmpBuf,”%s%2.2X”, HashStr, c); // c это unsigned char
Помогите перевести следующие строки кода из С++ в Delphi. То есть у меня возникла проблема с типами данных и некоторыми функциями. Заранее спасибо.
void GetHashStr(wchar_t* Password,char *HashStr)
Procedure GetHashStr(Password:PWideChar; HashStr:char)
CryptHashData(hHash, (unsigned char*)Password, (wcslen(Password)+1)*2);
Это взял из своей функции:
var
Password:string;
...
CryptHashData(hHash, PByte(Password), length(Password), 0)
в Си варианте предлагают length(Password)*2
char TmpBuf[128];
var
TmpBuf:Char[0..128];
wsprintf(TmpBuf,”%s%2.2X”, HashStr, c); // c это unsigned char
Наверное так:
Format('%2.2x', [Ord(PChar(HashStr)[I])]);
P.s. Как я понял это CryptApi.
P.s. Как я понял это CryptApi.
Да это из тех степей. Я перевожу функцию для дешифровки логина-пароля из Интернет Експлоера.
Если все получиться - выложу тут готовый вариант.
Password: PWideChar;
А далее ты пишешь
var Password: string;
Password берется из параметра первой процедуры. Все остальные функции вызываются в ней.
Последнее дословно, наверное будет так:
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[i]);
P.s. Спасибо SLESH дал в свое время мне эти функции :)
1) void GetHashStr(wchar_t* Password, char *HashStr) - это
Procedure GetHashStr(Password:PWideChar; HashStr:Pchar) // про * незабываем )
2) CryptHashData(hHash, (unsigned char*)Password, (wcslen(Password)+1)*2);
Тут считается кол-во символов расширенной строки + символ конца строки (0x00) и умножается на 2 чтобы узнать длинну в байтах. По этому более корректно будет так:
CryptHashData(hHash, PByte(Password), (length(Password)+1)*2, 0)
JnK, slesh - спасибо, получилось! Ваши подсказки и метод научного втыка рулят.
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot