2012-01-20 36 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服务器。

相关问题