Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.07.25;
Скачать: CL | DM;

Вниз

COM клиент на Delphi. Правильно ли я делаю?   Найти похожие ветки 

 
awaken   (2002-07-15 07:55) [0]

1.Нужно ли в Delphi вызывать CoInitialize/CoUninitialize,
а также AddRef и Release? вроде бы я читал что она делает это
автоматически

2.При запуске проги из-под Delphi IDE происходит крэш после
закрытия формы. похоже из-за CoUninitialize;
при запуске под виндами все ОК

3.Как преобразовать данные возвращаемые в BSTR (в Delphi -
WideString) в нормальный читаемый вид?
эта тестовая прога делает расшифровку паролей, вызывая
COM-объект написанный на C++. при приведении WideString к
String часть символов коверкается и отображается как ?


procedure TSecureTest.EncryptBtnClick(Sender: TObject);
var
lKey, len, i: integer;
Src, Res, SHex: WideString;
pCrypt: ICryptoAPI;
begin
OleCheck(pUnk.QueryInterface(ICryptoAPI,pCrypt));
pCrypt._AddRef;
lKey := StrToInt(Key.Text);
Src:= SrcPwd.Text;
Res:="";
// Encrypt password using key generated by GetKey()
OleCheck(pCrypt.Encrypt(Src, lKey, Res));
pCrypt._Release;
EncPwd.Text := Res;
len := Length(Res);
SHex := "";
// Show binary as Hex
for i:=1 to len do
SHex := SHex + Format("%02x",[ord(Res[i])]);
EncPwdHex.Text := SHex;
end;

procedure TSecureTest.DecryptClick(Sender: TObject);
var
lKey: integer;
Res, DcrPwd: WideString;
pCrypt: ICryptoAPI;
begin
OleCheck(pUnk.QueryInterface(ICryptoAPI,pCrypt));
pCrypt._AddRef;
lKey := StrToInt(Key.Text);
Res := EncPwd.Text;
pCrypt.Decrypt(Res, lKey, DcrPwd);
pCrypt._Release;
// After decryption password FUCKED UP!
DecrPwd.Text:=DcrPwd;
end;

procedure TSecureTest.FormCreate(Sender: TObject);
begin
CoInitialize(nil);
// Create as out-of-process server
OleCheck(CoCreateInstance(CLASS_CoCryptoAgent, nil,
CLSCTX_LOCAL_SERVER, IUnknown, pUnk));
end;

procedure TSecureTest.FormClose(Sender: TObject; var Action: TCloseAction);
begin
pUnk._Release;
CoUninitialize;
end;


 
Romkin ©   (2002-07-15 10:28) [1]

1. Не надо. CoInitialize вызывается в Application.Initialize при использовании COM (если в проекте используется ComObj). Исключение - если создаешь поток, тогда ручками. AddRef & Release Вызываются тоже автоматически, для типа interface
2. Не всречал...
3. при присвоении WideString типу string все приводится автоматически, (обратно - тоже), проблемы я встречал только на D4 при преобразовании out параметра процедуры (не Retval). Возможно, на D6 тоже это есть. В В твоем случае именно это. Проблемы не с перекодированием, а с вызовом метода.



Страницы: 1 вся ветка

Текущий архив: 2002.07.25;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.013 c
3-81132
Виталий Панасенко
2002-07-03 14:16
2002.07.25
D1+D5


14-81409
books
2002-06-26 15:00
2002.07.25
Электронные книги по программированию


1-81305
Smok_er
2002-07-11 17:55
2002.07.25
Фильтрование данных, загружаемых в TWebBrowser


1-81301
Akmal Paiziev
2002-07-12 12:34
2002.07.25
Как в Дельфи создать Shareware product?


14-81472
BillyJeans
2002-06-28 15:49
2002.07.25
Help!!! Уехали картинки на панели инструментов...