programm per dialogbox aus dll starten



  • hallo!

    ich versuche grad ein extra fenster für meine anwendung in eine dll auszulagern, damit ich später einfach per modulbauweise mehrere fenster hinzufügen und entfernen kann. aber DialogBox gibt bei mir immer einen fehler.
    laut GetLastError ist es die nr 1814 ("The specified resource name cannot be found in the image file.)

    INT_PTR CALLBACK DLLDlgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
    {
     return false;
    }
    
    DLLEXPORT int load_window(HINSTANCE hInstance)
    {
     int rc, err;
     MessageBox(NULL, "hier bin ich!", "", MB_OK);
     rc =  DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN), NULL, DLLDlgProc);
     err = GetLastError();
     return rc;
    }
    

    IDD_MAIN wurde per resourceneditor erstellt, ist richtig geschrieben und auch als 9 definiert.

    die funktion load_window wird vom externen programm geladen und das gibt auch hInstance als parameter über. kann es sein, dass hInstance vom hauptprogramm die falsche instance ist? muss das die dllinstance sein? aber wie bekomm ich die? hoffe, ihr könnt mir helfen

    so long

    till



  • ach, kann es sein, dass meine DLLMain irgendwie nicht aufgerufen wird?

    BOOL WINAPI DLLMain(HINSTANCE hDllInstance, DWORD fdwReason, LPVOID lpReserved)
    {
     MessageBox(NULL, "LOAD !!!", "", MB_OK);
     return true;
    }
    

    das wundert mich irgendwie... .



  • also, ich bin mir ziemlich sicher, dass du ne falsche hinstance drin hast.
    musst irgendwie versuchen, die richtige dllinstance zu bekommen, aber leider keine ahnung, wie das geht 😉

    vielleicht weiß ja sonst noch wer ausm board, wie man einfach die hinstance einer dll bekommt... .

    edit: *bing* mir is grad eingefallen, wie man die hinstance auf umwegen bekommt:
    falls du die dll per loadlibrary lädst, dann musst du die dll in einer HMODULE variable speichern. diese variable is laut msdn = der hinstance der dll. also kannst du aus dem ausführenden programm deine hinstance übergeben.

    gl & hf (warum hier das board aus h*f einfach hf macht is mir unerklärlich. bei mir heist h*f "have fun") 😉



  • Aber wenn ich das richtig verstanden habe befindet sich die Dialog-Ressource doch in der exe und nicht in der dll - demnach brauchst du auch das hInstance der exe 😉



  • neeee, die dll soll zur laufzeit eingebunden werden.... ich habs jetzt mal so gebastelt, wie eagel2k es gesagt hat. scheint zu funktioniern......



  • Achso, dann hatte ich das wohl nur falsch interpretiert - macht so eh mehr Sinn 🤡


Anmelden zum Antworten