Achei onde é o problema. É no:
C:\ACBr\Fontes\ACBrDFe\ACBrDFeCapicomDelphiSoap.pas
TDFeCapicomDelphiSoap.OnBeforePost
Para resolver a questão da NFS-e, precisa ser retirado o IF desta procedure, senão apresenta o erro "Erro ao ajustar INTERNET_OPTION_CLIENT_CERT_CONTEXT: 12046".
Fazendo isso, resolve o problema da NFS-e, mas acontece o erro na NF-e do crypt32.dll mencionado acima.
Se arrumo uma coisa, estrago a outra... Preciso que os dois funcionem... Alguma solução por aí?
Consegui resolver! Agora funciona para NF-e e para NFS-e. Entre colchetes tem o código anterior, subtituído pela linha acima. Tem que ficar exatamente assim... Será que dá para inserir esta alteração diretamente nos fontes do ACBR?
C:\ACBr\Fontes\ACBrDFe\ACBrDFeCapicomDelphiSoap.pas
TDFeCapicomDelphiSoap.OnBeforePost
with FpDFeSSL do
begin
if (UseCertificateHTTP) then
begin
CertContext := Certificado as ICertContext;
CertContext.Get_CertContext(HCertContext);
InternetSetOption(Data, INTERNET_OPTION_CLIENT_CERT_CONTEXT, Pointer(HCertContext), SizeOf(CERT_CONTEXT));
{
if not InternetSetOption(Data, INTERNET_OPTION_CLIENT_CERT_CONTEXT,
Pointer(HCertContext), SizeOf(CERT_CONTEXT)) then
raise EACBrDFeException.Create('Erro ao ajustar INTERNET_OPTION_CLIENT_CERT_CONTEXT: ' +
IntToStr(GetLastError));
}
end;