VB6:Capicom在WinXP上崩溃

时间:2008-12-01 19:26:31

标签: vb6 encryption crash capicom

有关解决此次崩溃的任何建议吗?

以下代码在记录<part>14和记录<part>15之间间歇性崩溃。 Plaintext是一个路径字符串(在这种情况下它是"C:\Documents and Settings\Brian\Desktop\Joy\",尽管明显缺乏这样的快乐。我有一种下沉的感觉,这是某种邪恶的记忆问题的症状。我试过两个Capicom 2.1.0.1和2.1.0.2,两者都崩溃。后者给出了一个标准的错误报告消息,前者无声地死亡(即程序自行关闭)。我在其他人的XP机器上测试了同样的问题,尽管它在Vista上运行良好。

Const curMthd = "EncryptStringWrap"
Dim Message As CAPICOM.EncryptedData
Set Message = New CAPICOM.EncryptedData
Dim oUtil As CAPICOM.Utilities
Set oUtil = New CAPICOM.Utilities
E.ErrorLog "<PART>14"
Message.Content = plaintext
E.ErrorLog "<PART>15"

编辑:这不是导致问题的数据。我一直在手动传递数据来测试这个;它正常工作。令人讨厌的是,当我将测试代码放入初始化时,bug就消失了。邪恶的heisenbug :(。可能是一个记忆问题:(

编辑2:重写和诸如此类here,并关闭。问题本身并不是同一个问题,但这个问题是基于对问题的严重误解。

1 个答案:

答案 0 :(得分:0)

斜杠可能导致CAPICOM无法正确处理字符串。通过将代码放入一个循环,您可以在其中提供不同的字符串,您可以找出问题序列是什么。

鉴于CAPICOM是cryptoAPI的包装器,这可以为您提供另一条路径,您可以使用相同的序列和相同类型的调用直接运行访问Crypto API的测试项目。从在互联网上阅读是一个薄薄的包装。

MSDN有一些示例代码here还有更多示例代码。

我用这种方式处理了各种“包装”Com DLL的许多问题。找到导致问题的数据。使用相同的数据直接使用Win API编写测试项目。然后评估。

结果通常是我实现自己的包装器。或者发现我错过了一个步骤或配置错误。

请注意,这适用于.NET中的包装器程序集以及能够使用反射器查看包装器正在执行的操作的额外好处。