I am quite excited about Delphi 10.3 Rio inline variable declarations. However I ran into strange problem and it seems that I need to initialize record after it has been inline declared:
program Project8;
{$APPTYPE CONSOLE}
{$R *.res}
uses System.SysUtils,classes;
procedure DoEvil;
//var sr:TSearchRec; //A
begin
//var sr:= default(TSearchRec); //B
var sr:TSearchRec; //C
sr.Name := EmptyStr; //D
FindFirst('*.*',faAnyFile,sr);
while sr.Name<>EmptyStr do
begin
Writeln(sr.name);
sr.Name := EmptyStr;
FindNext(sr);
end;
end;
begin
try
DoEvil;
{ TODO -oUser -cConsole Main : Insert code …Run Code Online (Sandbox Code Playgroud) 我想从Delphi(XE)应用程序访问存储在Mozilla产品(Firefox和Thunderbird)中的证书.首先,我想列出它们,接下来能够管理它们(导入,导出,删除)并使用它们(符号)会很好.尽管使用mozilla支持的所有令牌,软件令牌就足够了.
到目前为止,我尝试使用XPCOM与http://d-gecko.svn.sourceforge.net/viewvc/d-gecko/trunk/ delphi绑定.然而,周围没有太多的文档,我有点混淆所有的术语和概念.我能管理的最好的是:
var ns:nsIX509CertDB;
servMgr:nsIServiceManager;
p:Pchar;
begin
GRE_Startup;
NS_GetServiceManager(servmgr);
servMgr.GetServiceByContractID('@mozilla.org/security/x509certdb;1',NS_IX509CERTDB_IID,ns);
ns.FindCertNicknames(nil,1,count,p);
GRE_Shutdown;
end;
Run Code Online (Sandbox Code Playgroud)
使用此代码,我确实获得了certdb对象的实例,并且我可以向它请求证书.但是它似乎是完全空的(来自FindCertNicknames的计数为0)并且它也不会对更改OCSP做出反应(IsOcspOn总是返回true).我想我创建了新的certstore,或者我需要以某种方式激活默认用户配置文件.
我也尝试访问softokn.dll作为PKCS#11库.由于这似乎有某种PKCS#11 API,因此响应不佳.即C_Inititialize上的CKR_BAD_ARGUMENTS.
最后也是非常糟糕的方式是直接访问证书文件,因为它应该是"标准"NSS,但我真的不喜欢这种方式.