저는 역사적으로 Delphi IClientTable 인터페이스 (MIDAS.DLL ??)를 사용하여 로컬 파일 데이터베이스 (.CDS 파일)를 유지 관리하는 C++ 응용 프로그램을 보유하고 있습니다. 우리의 C++ 응용 프로그램 내에서 IClientTable은 COleDispatchDriver MFC 인터페이스/개체입니다.CDS 클라이언트 데이터 세트 파일 -이를 조작 할 수있는 다른 방법이 있습니까?
나는이 모든 것을 멀리하고 SQLite를 사용하고 싶지만, 불행히도 지금 당장이 일을 할 수있는 위치에 있지 않습니다.
누군가이 COM 오버 헤드에 대한 오픈 소스 대체품이 있는지 말해 줄 수 있습니까? 간단한 DLL, 라이브러리 또는 소스 코드 집합을 내 프로그램에 컴파일하여 COM 인터페이스를 없애고 싶습니다. COM 인터페이스를 제거하면 많은 슬픔을 느끼게됩니다.
COM 인터페이스를 제거하고 싶은 이유를 알고 싶다면 10 년 동안 문제없이 사용해 왔습니다. 최근에 Windows XP Embedded를 사용하는 고객을 찾았습니다. IClientTable COM 디스패치 인터페이스를 사용할 때 Windows WM_QUERYENDSESSION 메시지가 흡수되거나 더 이상 내 응용 프로그램에 도달하지 못하는 이유가 있습니다. IClientTable 인터페이스 사용을 중단하면 WM_QUERYENDSESSION 메시지가 표시됩니다.
간단히 말해 IClientTable COM 디스패치 인터페이스가 Windows의 로그 오프/종료를 허용하지 않습니다.
예 IClientTable은 우리 팀이 TClientDataSet Delphi 클래스 용으로 만든 래퍼입니다. 나는 DCOM이 제거되었다고 (??)하지만 Midas에 대한 소스는 여전히 COM을 사용하고 있음을 나타냅니다. 수정 된 Midas.dll에서 DLL 함수를 노출한다는 아이디어를 가지고 놀았지만, 어쨌든 TClientDataSet 클래스에 의해 작업이 완료됩니다. 우리는 ClientDataSet을 사용하지 않아도됩니다. – SparkyNZ
실제로 자신의 CD 2 진 형식 구문 분석기를 작성하는 것은 그리 어렵지 않습니다. 나는 내 자신의 midas 버전에서 하이퍼베이스를 기반으로했습니다 – vavan
True Vavan .. 저는 개인적으로 단순히 CDS를 완전히 덤프하고 우리가 가지고있는 것에 대해 SQLite로 옮기는 것을 선호합니다.하지만 위험에 관한 모든 것, 그리고 내가 무엇을하고 이것을 바꿀 수 없는지 임박한 석방에 앞서 늦은 프로젝트. WinDbg와 같은 도구로 이것을 정확히 찾아내어 문제의 원인을 알 수는 없지만 SendMessage API 호출을 통해 SendMessage API 호출에 연결하지 않으면 어떻게해야하는지 모르겠다. 커널 디버거 .. – SparkyNZ