2012-01-20 16 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サーバーである必要があります。

関連する問題