2012-01-20 2 views
0

컨트롤 중 하나에 C++ 응용 프로그램 (SUMATRA pdf 뷰어)을 호스팅하는 Winforms 응용 프로그램이 있습니다.호스트 모드에서 DDE 서버가 연결을 설정하지 않았습니다.

DDE를 두 가지 방법으로 보낼 수 있기를 원하며, C++가 독립형 일 때 이 잘 작동합니다. 그러나 호스트 모드에서 I 은 WinForms 앱에서 수마트라로 DDE 연결을 시작할 수 없습니다. 나는 C#에서 NDDE를 사용

, 여기에 내 코드입니다 :

class SumatraCommander : DdeClient 
{ 
    public SumatraCommander() : base("SUMATRA", "control") 
    { 

    } 


    public void MoveDocuments(ClientsQuestion question) 
    { 
     if (!this.IsConnected) this.Connect(); // this line fails only when sumatra 
//is hosted 
    } 
} 

그리고이 기능을 시작 수마트라

에서
case WM_DDE_INITIATE:   
     return OnDDEInitiate(hwnd, wParam, lParam); 

처리 WINAPI 메시지입니다 :

LRESULT OnDDEInitiate(HWND hwnd, WPARAM wparam, LPARAM lparam) 
{ 
DBG_OUT("received WM_DDE_INITIATE from %p with %08lx\n", (HWND)wparam, lparam); 

ATOM aServer = GlobalAddAtom(PDFSYNC_DDE_SERVICE); 
ATOM aTopic = GlobalAddAtom(PDFSYNC_DDE_TOPIC); 

if (LOWORD(lparam) == aServer && HIWORD(lparam) == aTopic) { 
    if (!IsWindowUnicode((HWND)wparam)) 
     DBG_OUT("The client window is ANSI!\n"); 
    DBG_OUT("Sending WM_DDE_ACK to %p\n", (HWND)wparam); 
    SendMessage((HWND)wparam, WM_DDE_ACK, (WPARAM)hwnd, MAKELPARAM(aServer, 0)); 
} 
else { 
    GlobalDeleteAtom(aServer); 
    GlobalDeleteAtom(aTopic); 
} 
return 0; 
} 

하는 것이 도움이됩니다 , 내가 수마트라 뷰어를 넣은 C# Winforms 컨트롤의 메시지 처리를 재정의한다면?

또는 C++ 코드에 문제가 있습니까?

또는 다른 컨트롤에서 호스팅 할 때 일반적으로 DDE 서버가 될 수 있습니까?

답장을 보내 주셔서 감사합니다.

답변

0

밝혀졌습니다. 호스트 모드에서 호스트 응용 프로그램은 DDE 서버 여야합니다.

관련 문제