zlibを使用して文字列を圧縮しようとしています(現在の 1.2.3 バージョンの zlib と zlib 1.1.3 でこのコードを試しました)。 日本語のマシンで実行しない限り、私のコードは正しく動作します。ファイルを圧縮した後、暗号化しています。復号化は成功しますが、uncompress の呼び出しは -3 を返します (Z_DATA_ERROR
入力データが破損していることを意味します)。エラーがログに記録されていないため、例外がスローされておらず、圧縮関数が 0 を返していることがわかります ( Z_OK
、機能したことを意味します)。
したがって、問題は、行 " " または行 " ."のsCompressed
いずれかで文字列の整合性が失われていることだと思います あるいは、VB6 がの呼び出し中にの内容に役立つ何か愚かなことをしている可能性があります。私は、この関数の戻り値が後で壊れていないことを知っています.sCompressed = Left(sCompressed, lcompressedlen)
encryptedData.Content = sCompressed
sCompressed
compress
Public Function EncryptString(ByVal Definition As String) As String
On Error GoTo ErrorHandler
Dim encryptedData As New CAPICOM.encryptedData
encryptedData.SetSecret KEY_CONST
Dim lStringLen As Long
Dim lcompressedlen As Long
Dim sCompressed As String
Dim lReturn As Long
Dim tstpost As String
lStringLen = Len(Definition)
lcompressedlen = (lStringLen * 1.01) + 13
sCompressed = Space(lcompressedlen)
lReturn = compress(sCompressed, lcompressedlen, Definition, lStringLen)
If lReturn <> 0 Then
sCompressed = "Error: " & CStr(lReturn)
'<LOG ERROR>'
Else
sCompressed = Left(sCompressed, lcompressedlen)
End If
encryptedData.Content = sCompressed
encryptedData.Algorithm.Name = CAPICOM_ENCRYPTION_ALGORITHM_3DES
EncryptXmlString = encryptedData.Encrypt
Exit Function
ErrorHandler:
'<LOG ERROR>'
Resume Next
End Function
結論:
不審な文字セットを備えたマシンで実行すると、プログラムにエラー メッセージを表示して終了させることになりました。このバグがまだいくつかの設定に存在する可能性が非常に高く、エラーをトリガーする一部の設定には存在しない可能性もあります。ただし、ターゲット オーディエンスは英語を話す人であるため、Turkey Test に合格することは、実際にこれにより多くの時間を費やすことを正当化するほど重要ではありません。