我们正在将旧的Visual Studio 6应用程序移植到Windows 7.该应用程序大量使用COM和旧的RogueWave数据库接口。我们有一个非常随机的服务器崩溃,看起来像某种内存完整性问题。崩溃发生在COM应用程序中。应用程序使用COM启动,启动后尝试连接到数据库。将发生以下情况之一:
1)有时COM应用程序会发生服务器崩溃
2)有时它会起作用
3)有时它将无法连接到数据库,甚至不会重试。
4)有时在调用RogueWave数据库时,它不会返回。 连续多次启动COM应用程序时,它将显示任意数量的这些症状。
此时我无法确定导致不稳定的原因。
应用程序也会在正常启动时崩溃,而不是使用COM,但不会频繁崩溃。
之前我在本产品的另一个区域看到了相同症状的问题。我能够确定症状与调用dll的调用有关,这些调用返回了一个创建为局部变量的CString。使用_AFXDLL预处理器定义构建dll。删除对此dll的调用后,不再出现此问题。这个问题在许多地方都有发生。
起初我认为这个问题是因为dll不是作为AFX EXTENSION DLL构建的,但在阅读完文档后,_AFXDLL预处理器定义也会将dll构建为AFX_EXTENSION_DLL。我习惯使用_AFXEXT预处理器指令来构建AFX_EXTENSION dll。
现在崩溃的COM应用程序不使用此DLL。 COM应用程序使用另一个DLL,它有一个导出函数,它返回一个创建为局部变量的CString。在数据库连接期间不会调用此导出的函数。
任何人都有任何想法会在COM应用程序中导致这种明显的内存完整性崩溃吗?提前感谢您的帮助。
答案 0 :(得分:0)
原来这是由Oracle 10g express客户端DLL中的错误引起的。