2012-03-29 5 views
1

저는 역사적으로 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의 로그 오프/종료를 허용하지 않습니다.

답변

1

바이너리 ClientDataSet 파일을 여는 다른 방법을 모르겠습니다. ClientDataSets는 XML 파일 형식도 사용할 수 있지만 IClientTable 인터페이스에서 해당 기능에 대한 액세스 권한을 제공하는지 여부는 알 수 없습니다. 내 생각에 COM 종속성이 올 경우

은 당신도 도움이 될 수 있습니다 델파이의 최신 버전에 래퍼 DLL을 다시 컴파일 델파이 2007 델파이 2009, 이미 COM에 ClientDataSet에의 의존성이 제거 된이 인식되지 않은 경우 ClientDataSet에서.

Delphi의 모든 버전에서 IClientTable 같은 것이 없습니다. IClientTable은 ClientDataSet 기능을 캡슐화하기 위해 팀에서 작성한 래퍼 DLL의 일부라고 추측합니다. 래퍼 DLL을 작성한 사람이 IClientTable 인터페이스를 COM 개체로 노출했기 때문에 COM 개체에 대한 종속성의 원인이 될 수도 있습니다.

+0

예 IClientTable은 우리 팀이 TClientDataSet Delphi 클래스 용으로 만든 래퍼입니다. 나는 DCOM이 제거되었다고 (??)하지만 Midas에 대한 소스는 여전히 COM을 사용하고 있음을 나타냅니다. 수정 된 Midas.dll에서 DLL 함수를 노출한다는 아이디어를 가지고 놀았지만, 어쨌든 TClientDataSet 클래스에 의해 작업이 완료됩니다. 우리는 ClientDataSet을 사용하지 않아도됩니다. – SparkyNZ

+0

실제로 자신의 CD 2 진 형식 구문 분석기를 작성하는 것은 그리 어렵지 않습니다. 나는 내 자신의 midas 버전에서 하이퍼베이스를 기반으로했습니다 – vavan

+0

True Vavan .. 저는 개인적으로 단순히 CDS를 완전히 덤프하고 우리가 가지고있는 것에 대해 SQLite로 옮기는 것을 선호합니다.하지만 위험에 관한 모든 것, 그리고 내가 무엇을하고 이것을 바꿀 수 없는지 임박한 석방에 앞서 늦은 프로젝트. WinDbg와 같은 도구로 이것을 정확히 찾아내어 문제의 원인을 알 수는 없지만 SendMessage API 호출을 통해 SendMessage API 호출에 연결하지 않으면 어떻게해야하는지 모르겠다. 커널 디버거 .. – SparkyNZ