2017-03-12 14 views
1

나는 실행중인 DDE 서버에 대해 궁금해서 TDdeClientConv 클래스를 시도했지만 혼란 스러웠습니다. (방법을 찾지 못했을 수도 있습니다) 마침내 내 자신의 저수준 (일반적으로 응용 프로그램은 DDEML 추상화 레이어를 사용해야합니다) "클라이언트 "`TDdeClientConv` 클래스로 모든 사용 가능한 DDE 서버를 열거 할 수 있습니까?

procedure TForm6.FormClick(Sender: TObject); 
begin 
    { initiate DDE conversation with all top-level windows } 
    SendMessage(
    HWND_BROADCAST, 
    WM_DDE_INITIATE, 
    Handle, 
    MakeLParam(
     0,  // all services 
     0   // all topics 
    ) 
); 
end; 

procedure TForm6.WMDDE_Ack(var Message: TWMDDE_Ack); 
begin 
    { this message handler receives acknowledgements } 
    { and prints service-topic pairs to console } 
    Writeln('"' + GetAtom(Message.App) + '"', #9, '"' + GetAtom(Message.Topic) + '"'); 
end; 

질문 : 수는 즉, 사용 가능한 모든 서비스를 제공하는 DDE 대화를 시작하고 여러 승인을 받게되어, TDdeClientConv 클래스와 동일한 기능을 수행 할? 또는 TDdeClientConv은 DDE 대화의 클라이언트 끝점을 나타냅니다. 따라서 내 시나리오가 범위를 벗어 났습니까?

답변

2

TDdeClientConv은 창 메시지를 사용하지 않으며 대신 Dynamic Data Exchange Management Library (DDEML)을 사용합니다.

가 지정된 서비스 이름과 주제를 지원하는 서버 응용 프로그램과의 대화를 설정합니다 : 그것은 DDEML DdeConnect() 기능을 사용하여 연결을 설정으로 TDdeClientConv 만 지정된 서비스 및/또는 주제를 구현하는 단일 서버에 연결할 수 있습니다 이름 쌍. 이러한 서버가 두 개 이상 존재하는 경우 시스템에서는 하나만 선택합니다.

DDEML의 DdeConnectList() 기능은 주어진 서비스 및/또는 주제를 지원하는 여러 서버와 대화 할 수 있습니다.

지정된 서비스 이름과 주제 이름 쌍을 지원하는 모든 서버 응용 프로그램과의 대화를 설정합니다. 응용 프로그램은이 함수를 사용하여 기존 대화 핸들을 함수에 전달하여 대화 핸들 목록을 가져올 수도 있습니다. 동적 데이터 교환 관리 라이브러리는 대화 목록에서 종료 된 대화의 핸들을 제거합니다. 결과 대화 목록에는 지정된 서비스 이름 및 주제 이름을 지원하는 현재 설정된 모든 대화의 핸들이 포함됩니다.

DdeQueryNextServer()DdeQueryConvInfo() 기능을 사용하여 해당 목록을 열거 할 수 있습니다.