Dialog in DLL packen



  • Deshalb muss man ja auch innerhalb von MFC-Extension-DLLs in jeder Funktion, die diese Handles direkt von der DLL benötigt, AFX_MANAGE_STATE aufrufen!

    ja, ja, was gibt denn dann AfxGetApp() in deiner function zurück ??

    class CMplKernelDApp : public CWinApp   // ist meine dll
    {
    public:
      CMplKernelDApp();
      void AddReg(rRegWnd& tRegWnd);
    
    ...
    };
    
    void CRegWndD::AddReg(rRegWnd& tRegWnd)
    {
      AFX_MANAGE_STATE(AfxGetStaticModuleState());
      ((CMplKernelDApp*) AfxGetApp())->AddReg(tRegWnd); 
    }
    


  • die main interessiert sich nicht dafür, ob das Dialogfeld nun in einer DLL liegt oder nicht.

    die nachrichtenschleife (ich bezeichnete sie als main) weil im allgemeinen eine anwendung ein hauptfenster hat, interessiert es schon ob ein dialogfeld aufgerufen wird.

    if (hwndDlgModeless == (HWND) NULL || 
                    !IsDialogMessage(hwndDlgModeless, &msg) &&
    

    wird überprüft !!! hab auch lange gesucht und habe dann den code entworfen.
    ich benutzte in dll dialogfelder um meine anwendung in mehrere module zu zerlegen.

    fakt ist das PreTranslateMessage von dialogfeldern nicht korrekt bearbeitet werden.

    tab, mouseover, mouseleave werden nicht bearbeitet.

    wirde auch in der hilfe beschrieben.



  • fakt ist das PreTranslateMessage von dialogfeldern nicht korrekt bearbeitet werden.

    tab, mouseover, mouseleave werden nicht bearbeitet.

    dann hast du was anderes falsch gemacht



  • @vdittrich
    Habe folgende Fehler in Deinem Code gefunden:

    registrieren der dll
    BOOL CMplKernelDApp::InitInstance()
    {
      CWinApp::InitInstance();
      TRACE("CMplKernelD.dll wird initialisiert handle:%x!\n", m_hInstance);
      // add reg 
      PostThreadMessage(WM_THREAD_APP, (WPARAM)m_hInstance, (LPARAM)&CMplKernelDApp::_PreTranslateMessage);
      return TRUE;
    }
    
    int CMplKernelDApp::ExitInstance()
    {
      TRACE("CMplKernelD.dll wird abgebrochen handle:%x!\n", m_hInstance);
      PostThreadMessage(WM_THREAD_APP, (WPARAM)m_hInstance, 0);
      return CWinApp::ExitInstance();
    }
    

    1. PostThreadMessage verlangt keine Message und keine hInstance als 1. und 2. Parameter
    2. Selbst wenn es so wäre, so ist m_hInstance im Aufruf der DLL nämlich die Instanz der DLL, welche aber zum Hauptprozess gehört, also wird die Message an den Hauptprozess gesendet
    3. InitInstance der DLL wird NUR beim Laden der DLL aufgerufen. D.h. solltest Du eine weitere Instanz Deiner Anwendung starten wollen, welche logischerweise die gleiche DLL benutzt, funzt InitInstance gar nicht mehr.



  • meine anwendung funktioniert, ich habe mir z.b postmessage (übergabe von parametern ) gedanken gemacht. (siehe codeauszug)

    void CMplApp::OnRegMap(WPARAM wParam, LPARAM lParam)
    {
      if (lParam)
      {
        VERIFY(m_tMap[(HANDLE)wParam]=(pPreTranslateMessage)lParam);
    ...
    

    wenn ihr es anzweifelt, sucht in der msdn nach dialogfelder und message und ihr werdet zu einer schlüssigen meinung kommen.
    es wurde nicht umsonst so viel das problem beschrieben.

    schönes wochenende !!!

    [ Dieser Beitrag wurde am 21.03.2003 um 16:30 Uhr von vdittrich editiert. ]



  • Original erstellt von <->:
    **Hallo,
    wie kann ich Dialog und Views in eine DLL packen und anschließend laden?

    Danke!! CU
    PS: Hab in der Such Funktion schon einige Threads zu diesem Thema gefunden, aber konnte auf der HP von Unix-Tom nichts finden 😕**

    http://www.sensorme.de/dateien/dialogdll.zip



  • @vdittrich
    Bitte gib mir mal nen Link für die MSDN, find im Moment nix!



  • ok,

    das ist die version einer MFC-Erweiterungs-DLL.

    ich nutze reguläre DLLs, gibt es da ein vom microsoft vorgesehenen script?

    volker



  • ich nutze reguläre DLLs

    Hm, Du willst also, dass eine Anwendung, die auf MFC basiert, über Nicht-MFC-Schnittstellen auf eine DLL zugreift, welche nur richtig arbeitet, wenn Ihr bekannt ist, ob die Anwendung für MFC erstellt wurde?
    ->
    Wenn ich jemandem etwas über C++ erzähle, der keine Ahnung vom Programmieren hat, und möchte, dass dieser es einem anderen weitererzählt, bin ich mir sicher, dass es nicht so ankommt, wie ich es erzählt habe.



  • ja,

    ist vb oder vba mfc-dll kompatibel ?

    volker


Anmelden zum Antworten