Файлы CDS Client Data Set - есть ли альтернативный способ манипулировать ими?

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

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

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

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

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


person SparkyNZ    schedule 29.03.2012    source источник


Ответы (1)


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

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

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

person LachlanG    schedule 30.03.2012
comment
Да, IClientTable — это оболочка, созданная нашей командой для класса TClientDataSet Delphi. Мне сказали, что DCOM был удален (??), но источник, который у меня есть для Midas, указывает, что он все еще использует COM. в любом случае работа выполняется классом TClientDataSet.. так что, скорее всего, мы будем вынуждены отказаться от использования ClientDataSet (что я был бы более чем счастлив сделать). - person SparkyNZ; 02.04.2012
comment
на самом деле не так уж сложно написать свой собственный анализатор двоичного формата cds. Я сделал это в своей собственной версии мидаса, основанной на гипербазе. - person vavan; 02.04.2012
comment
Истинный Ваван. Я лично предпочел бы просто полностью отказаться от CDS и перейти на SQLite из-за того, что у нас есть, но все дело в риске и в том, что мне не разрешено менять в конце проекта до неизбежного выпуска. Мне бы очень хотелось иметь возможность точно определить это с помощью такого инструмента, как WinDbg, чтобы не было вопроса о том, что вызывает проблему ... но я не знаю, как это сделать, если я не подключаюсь к вызову API SendMessage через отладчик ядра.. - person SparkyNZ; 03.04.2012
comment
вы можете попробовать использовать что-то вроде инструмента rohitab API Monitor, чтобы выяснить, кто виноват - person vavan; 03.04.2012