Файлы набора данных клиента CDS - есть ли альтернативный способ манипулировать ими? - PullRequest
1 голос
/ 30 марта 2012

У меня есть приложение C ++, которое исторически использует интерфейс Delphi IClientTable (MIDAS.DLL ??) для поддержки локальной файловой базы данных (файл .CDS). В нашем приложении C ++ IClientTable представляет собой интерфейс / объект MFC COleDispatchDriver.

Лично я бы хотел вообще отойти от этого и использовать SQLite, но, к сожалению, сейчас я не в состоянии сделать это.

Может кто-нибудь сказать мне, если есть замена с открытым исходным кодом для этих издержек COM? Я хотел бы, чтобы простая DLL, библиотека или набор исходных файлов были скомпилированы в мою программу, чтобы избавиться от интерфейса COM, который вызывает у меня столько горя.

Если вы действительно хотите знать, почему я хочу избавиться от интерфейса COM - это странно - мы использовали его в течение 10 лет без проблем. Недавно мы нашли клиента с Windows XP Embedded, и по какой-то причине при использовании интерфейса отправки IClientTable COM это приводит к тому, что сообщения Windows WM_QUERYENDSESSION поглощаются или перестают поступать в мое приложение. В ту минуту, когда я прекращаю использовать интерфейс IClientTable, я получаю сообщения WM_QUERYENDSESSION.

Вкратце: интерфейс диспетчеризации COM IClientTable, по-видимому, запрещает Windows выходить из системы / выключаться.

1 Ответ

1 голос
/ 31 марта 2012

Мне не известны альтернативные способы открытия двоичных файлов ClientDataSet. ClientDataSets может также использовать формат файла XML, но я не знаю, дает ли ваш интерфейс IClientTable доступ к этим функциям.

Если вы еще не знали об этом, зависимость ClientDataSet от COM была удалена, я думаю, либо Delphi 2007, либо Delphi 2009. Перекомпиляция DLL-библиотеки оболочки в последней версии Delphi может помочь, , если , COM-зависимость исходит от ClientDataSet.

Насколько я знаю, такой вещи, как IClientTable, нет ни в одной версии Delphi. Я предполагаю, что IClientTable является частью DLL-оболочки, написанной вашей командой для инкапсуляции функций ClientDataSet. Если тот, кто написал эту DLL-оболочку, выставил интерфейс IClientTable как COM-объект, что также может быть причиной вашей зависимости от COM.

...