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服务器吗?
感谢您的回复