对文档进行联合

[CAPICOM 是可用于以下操作系统的 32 位组件:Windows Server 2008、Windows Vista 和 Windows XP。 请改用.NET Framework来实现安全功能。 有关详细信息,请参阅 使用 CAPICOM 的替代方法。]

文档可由多个签名者签名。 例如,当两个或更多方签署合同或费用报告时,会发生这种情况。 在以下示例中,已签名的文档由第二个签名者接收。 此签名者使用 CoSign 方法将其他签名附加到文档。

如果发生任何 CAPICOM 错误,则会在 Err.Number 属性中返回负值。 有关 CAPICOM 错误代码的详细信息,请参阅 CAPICOM_ERROR_CODE。 如果 Err.Number 属性中的错误代码为正值,则错误为Windows错误。 有关Windows错误代码的信息,请参阅 Winerror.h。

注意

对文档进行联合还要求 Cosigner 具有具有私钥的可用证书才能创建签名。 如果在调用 Sign 方法时未指定签名者,并且没有证书在具有关联私钥的CAPICOM_MY_STORE中,该方法将失败。 如果CAPICOM_MY_STORE中只有一个证书与关联的私钥,则使用该密钥和证书。 如果有多个可用证书,将显示一个提示,以允许用户选择所需的证书。

如果在基于 Web 的应用程序中使用 CoSign 方法,则始终会显示一个提示,以在使用该签名者的私钥创建签名之前获取用户的权限。

 

在以下示例中,包含要签名的文档的文件以及该文档上的当前签名读取、签名已共同签名,并将新签名写入文件。 该示例使用已分离的签名,其中包含已签名的数据以及单独文件中的签名。

Sub CoSignContent(ByVal InputFile1Name As String, ByVal _
    InputFile2Name As String, ByVal OutputFileName As String)

    On Error GoTo ErrorHandler
    Dim c As String
    Dim s As String
    Dim CS As String
    Dim Signobj As New SignedData
    Open InputFile1Name for Input as #1
    Input #1, s
    Close #1
    Open InputFileName2 for input as #2
    Input #2, c 
    Close #2

    Signobj.Content = c
    Signobj.Verify(s)
    CS = Signobj.CoSign
    Open OutputFileName for output as #3
    Write #3, CS
    Close # 3
    Signobj = Nothing
    MsgBox("Cosign finished. Cosignature saved to a file.")
    Exit Sub
ErrorHandler:
    If err.number > 0 Then
        MsgBox("Visual Basic error found:" & err.description)
    Else
        MsgBox("CAPICOM error found : " & err.number)
    End If
End Sub