I did not work with them (until just now), but you have quite a few
errors that you must clear in your declarations and loop. I suggest your
read the ActiveX documentation carefully.
For example:
1. OpenCurrentUserStore() returns a long not a logic.
2. The the loop must start at 0 to numCerts - 1.
3. GetCertificate() returns a ChilkatCert not a string!
I created automation server classes for: IChilkatCertStore and IChilkatCert
Here is a working sample in VO 2.8 - 2838:
METHOD GetCertificates( ) CLASS TestDlg
local cTexto := "" as string
local i as int
local numCerts := 0 as int
local lReadOnly := true as logic
local ok as long
local oCertStore as IChilkatCertStore
local oChilkatCert as IChilkatCert
oChilkatCert := IChilkatCert{}
oCertStore := IChilkatCertStore{}
ok := oCertStore:OpenCurrentUserStore(lReadOnly)
If ok == 0 // error
InfoBox{self,"error", oCertStore:LastErrorText}:show()
oCertStore := null_object
return self
else
numCerts := oCertStore:NumCertificates
for i := 0 to numCerts - 1
oChilkatCert := oCertStore:GetCertificate(i)
if oChilkatCert != null_object
cTexto += AsString(oChilkatCert:SubjectDN) +" - "+
AsString(oChilkatCert:SubjectE) + crlf
else
? "oChilkatCert Error: " + oChilkatCert:LastErrorText
endif
next
self:oDCmCert:Value :=cTexto
endif
oChilkatCert := null_object
oCertStore := null_object
RETURN self
Note: if you get a class mismatch on oCertStore:GetCertificate(i),
either make sure you uncheck Class Checking option in Compiler options
or change the GetCertificate() method to return IChilkatCert class object:
METHOD GetCertificate(;
index; // AS LONG
) CLASS IChilkatCertStore
LOCAL oMethod AS cOleMethod
LOCAL uRetValue AS USUAL
oMethod := cOleMethod{}
oMethod:symName := String2Symbol("GetCertificate")
oMethod:iMemberid := 116
oMethod:wInvokeKind := INVOKE_METHOD
oMethod:nParams := 1
oMethod:lNamedArgs := TRUE
oMethod:cParamTypes := VTS_I4
oMethod:bRetType := VT_DISPATCH
uRetValue := SELF:__Invoke(oMethod, DWORD(_BP+16),PCount())
// To use a pre-defined class here,
// change OLEAutoObject to desired class name
uRetValue := iif( uRetValue:pInterface != null_ptr ,
IChilkatCert{uRetValue}, null_object)
RETURN (uRetValue)
Jamal