我有一个C++应用程序,过去使用Delphi IClientTable接口(interface)(MIDAS.DLL ??)来维护本地文件数据库(.CDS文件)。在我们的C++应用程序中,IClientTable是一个COleDispatchDriver MFC接口(interface)/对象。
我个人想完全摆脱这种情况,而使用SQLite,但是不幸的是,我现在无法执行此操作。
有人可以告诉我此COM开销是否有开源替代品?我想将一个简单的DLL,库或一组源文件编译到我的程序中,以摆脱COM接口(interface),这使我感到非常悲伤。
如果您真的想知道为什么我要摆脱COM接口(interface)-奇怪-我们已经使用了10年没有问题。最近,我们发现了一个使用Windows XP Embedded的客户,由于某种原因,当我们使用IClientTable COM调度接口(interface)时,这导致Windows WM_QUERYENDSESSION消息被吸收,或者不再到达我的应用程序。我停止使用IClientTable接口(interface)的那一刻,我收到了WM_QUERYENDSESSION消息。
简而言之:IClientTable COM调度界面似乎阻止Windows退出注销/关闭。
最佳答案
我不知道打开二进制ClientDataSet文件的任何其他方法。 ClientDataSets也可以使用XML文件格式,但是我不知道IClientTable接口(interface)是否允许您访问该功能。
如果您还不知道这一点,我认为Delphi 2007或Delphi 2009中已经删除了ClientDataSet对COM的依赖关系。如果COM依赖关系来自ClientDataSet,则在最新版本的Delphi中重新编译包装DLL可能会有所帮助。
据我所知,在任何版本的Delphi中都没有IClientTable这样的东西。我猜想IClientTable是您的团队编写的用于封装ClientDataSet功能的包装DLL的一部分。如果由谁编写该包装DLL,则将IClientTable接口(interface)公开为COM对象,这也可能是您依赖COM的原因之一。