Главная страница
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.008 c
1-81244
vanek
2002-07-14 19:13
2002.07.25
события


3-81187
Nebula
2002-07-04 14:53
2002.07.25
IB


6-81404
МИФИст
2002-05-12 12:49
2002.07.25
Создание сокета


1-81332
BAY
2002-07-12 15:44
2002.07.25
Клавиатура


1-81335
Crypto
2002-07-12 21:42
2002.07.25
как передать через ShellExecute много(!) E-mail адресов?