DDE服务器在托管模式下未建立连接

本文关键字:建立 连接 模式 服务器 DDE | 更新日期: 2023-09-27 18:20:57

我有一个Winforms应用程序,它在一个控件内托管一个C++应用程序(经过一些修改的SUMA pdf查看器)。

我希望能够双向发送DDE,当C++是独立的时,可以正常工作但是,在托管模式下,我无法启动Winforms应用程序到Sumatra的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控件的消息处理,这会有帮助吗?

或者C++代码中有什么错误?

或者,当我托管在另一个控件中时,通常不可能成为DDE服务器吗?

感谢回复

DDE服务器在托管模式下未建立连接

事实证明,这是不可能的。在托管模式下,主机应用程序需要改为DDE服务器。