Главная страница
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.01 c
1-81327
SemFLY
2002-07-12 18:23
2002.07.25
Как вызвать ?


3-81138
FilSM
2002-07-02 11:40
2002.07.25
Изменение значений свойств у Components


1-81276
Andy BitOff
2002-07-15 12:58
2002.07.25
ПОЛНОЕ описание функций Delphi6


14-81415
dimanew
2002-06-27 07:31
2002.07.25
Подскажите пожайуста где можно почитать об ОС


14-81461
MAxiMum
2002-06-25 16:21
2002.07.25
Поддержка Font.Charset