1

我有一个 C++ 应用程序,它历史上使用 Delphi IClientTable 接口(MIDAS.DLL??)来维护本地文件数据库(.CDS 文件)。在我们的 C++ 应用程序中,IClientTable 是一个 COleDispatchDriver MFC 接口/对象。

我个人希望完全摆脱这一点并使用 SQLite,但不幸的是我现在无法做到这一点。

有人可以告诉我这个 COM 开销是否有开源替代品?我想要一个简单的 DLL、库或源文件集来编译到我的程序中,以摆脱让我非常痛苦的 COM 接口。

如果你真的想知道我为什么要去掉 COM 接口——这很奇怪——我们已经使用了 10 年没有问题。最近我们发现一个使用 Windows XP Embedded 的客户,由于某种原因,当我们使用 IClientTable COM 调度接口时,这会导致 Windows WM_QUERYENDSESSION 消息被吸收,或者不再到达我的应用程序。在我停止使用 IClientTable 接口的那一刻,我收到了 WM_QUERYENDSESSION 消息。

简而言之:IClientTable COM 调度接口似乎阻止了 Windows 被允许注销/关闭。

4

1 回答 1

1

我不知道打开二进制 ClientDataSet 文件的任何替代方法。ClientDataSets 也可以使用 XML 文件格式,但我不知道您的 IClientTable 接口是否允许您访问该功能。

如果您不知道这一点,我认为在 Delphi 2007 或 Delphi 2009 中已经删除了 ClientDataSet 对 COM 的依赖。如果COM 依赖来自 ClientDataSet,则在最新版本的 Delphi 中重新编译包装器 DLL 可能会有所帮助。

据我所知,在任何版本的 Delphi 中都没有 IClientTable 这样的东西。我猜 IClientTable 是您的团队编写的包装 DLL 的一部分,用于封装 ClientDataSet 的功能。如果编写该包装 DLL 的人将 IClientTable 接口公开为 COM 对象,这也可能是您依赖 COM 的部分原因。

于 2012-03-30T21:53:08.263 回答