Installisin Project > Import Type Library alt DigiDocLibCOM teegi. Selle
tulemustena tekkisid DigiDoci klassid ActiveX alla.
Järgmiseks panin mõningad tekkinud komponendid vormi peale, väljavõte
.dfm failist:
object ComSignedDoc1: TComSignedDoc
AutoConnect = True
ConnectKind = ckRunningOrNew
Left = 40
Top = 104
end
object ComDigiDocLib1: TComDigiDocLib
AutoConnect = True
ConnectKind = ckRunningOrNew
Left = 8
Top = 104
end
object ComErrorInfo1: TComErrorInfo
AutoConnect = True
ConnectKind = ckRunningOrNew
Left = 72
Top = 104
end
object ComDataFile1: TComDataFile
AutoConnect = True
ConnectKind = ckRunningOrNew
Left = 104
Top = 104
end
Koodi kirjutamise juures tekkis kohe küsimus, et kuidas oleks võimalik
moodulis ComConstants olevaid konstante kasutada? Delphi tekitatud
päisefailis polnud neist jälgegi.
var szId, fn : WideString;
error : integer;
v : OleVariant;
begin
fn:= 'c:\Testid.doc';
ComDigiDocLib1.getLibVersion(szId); // Tulemus 1.91
ComSignedDoc1.initialize(WideString('1.1'), WideString('1.3'));
ComSignedDoc1.createDataFile(fn,
WideString('EMBEDDED_BASE64'),
WideString('application/msword'),
0,
v,
0,
WideString('sha1'),
WideString('ISO-8859-1'),
WideString('ISO-8859-1'), ComDataFile1.DefaultInterface);
ComDataFile1.DefaultInterface.Get_szId(szId);
ComSignedDoc1.calculateDataFileSizeAndDigest(szId, fn, 0);
ComSignedDoc1.createSignedDoc(WideString('c:\testid.ddoc'),
WideString(''), error);
end;
Selle koodi puhul annab calculateDataFileSizeAndDigest DigiDocLibCOM.dll
sisese access violationi.
Kui ma calculateDataFileSizeAndDigest rea välja kommenteerin ja
createDataFile parameetritena õiged faili suuruse ja digesti väärtused
kaasa annan, siis createSignedDoc tagastab vea 97.
Kus võib viga olla?
--
Ilmar Kerm