2012-01-20 69 views
0

我有一個Winforms應用程序託管一個C++應用程序(SUMATRA pdf查看器與​​一些修改)內的一個控件。DDE服務器未建立連接時,在託管模式

我希望能夠發送DDE兩種方式,其中工作正常時,C++是獨立的。但是,在託管模式下,我不能啓動從Winforms應用程序到蘇門答臘的DDE連接 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 
    } 
} 

這是WINAPI消息蘇門答臘

處理
case WM_DDE_INITIATE:   
     return OnDDEInitiate(hwnd, wParam, lParam); 

啓動功能:

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控件的消息處理,我在其中放置了Sumatra查看器?

或者在C++代碼中有什麼錯誤?

或者當我在另一個控件中託管時,通常不可能成爲DDE服務器嗎?

感謝您的回覆

回答

0

原來,這是不可能的。在託管模式下,主機應用程序需要成爲DDE服務器。

相關問題