editbox ohne winmain



  • kann man eine editbox auch ohne WinMain() funktion erstellen? Ich meine... Wenn man jetzt z.B eine DLL macht. Da braucht man ja nirgends eine WinMain Funktion. Wie kann man das denn dann machen?
    Oder gibts dann was ähnliches wie eine EditBox?



  • kann man eine editbox auch ohne WinMain() funktion erstellen?

    Ähm... hä ?

    Spontan würde ich jetzt mal ja sagen 🙂

    Wie meinst'n das ? Deine EditBox wird über den Aufruf von CreateWindow() erstellt, ob das jetzt in der WinMain() geschieht oder net, des is doch wurscht.
    Natürlich kannst du somit auch in ner DLL ... warte mal du redest gerade von der CEditBox oder ? Des hat ja was mit MFC zu tun und net mit der WinApi.
    [-> Falsches Forum]
    Na jedenfalls (egal wovon du sprichst, es ist mir auch rätselhaft bei deinen 3 mystischen Sätzen), du kannst auch in ner DLL deine EditBox erstellen. Wenn du das mithilfe der MFC versuchst, dann schau ganz einfach bei deinem DLL-Projekt, dass du auch die MFC-Unterstützung aktiviert hast.

    Ansonsten musst du mir erst mal erklären, was du genau haben willst. XD



  • Jaaaa aber bei CreateWindow (nein nichts mit MFC ;)) muss man doch hInstance und so übergeben. Dafür braucht man doch WinMain()?
    Ich möchte einfach eine EditBox erstellen (DLL soll ein PlugIn sein für ein Programm), wo man was eingeben kann. Das eingegebene wird dann in eine Variable gespeichert und kann dann auch benutzt werden.
    Dazu benutze ich CreateWindow um eine EditBox zu erstellen, oder nicht? Dort muss man doch einige Parameter übergeben, die man nur durch die WinMain() erhält und anderem... Ich weiß nicht wie ich so eine EditBox machen soll...



  • Für eine Windows-Anwendung brauchst Du immer eine WinMain-Funktion, wegen des
    Instanz-Handles hInstance. Ansonsten kannst Du alles andere in eine DLL verlagern, so auch eine EditBox.



  • nö, kannst mit subsystem:console alles genauso machen! 💡



  • Ja, gehen tut das schon, nur nicht in C++. In C/C++ braucht man immer eine main oder WinMain-Funktion. In Basic (Visual Basic oder FreeBasic) aber nicht.



  • seit wann hat man mit subsystem:console keine main funktion, elektrochecktnix?



  • okay, danke 😉
    und wenn ich jetzt in einer dll eine winmain funktion habe und mit callback funktion, wo die editbox drinne ist, wie rufe ich die editbox auf? ich meine... winmain wird ja nicht automatisch in der dll aufgerufen. Wie rufe ich WinMain() auf? Welche Parameter muss ich übergeben für HINSTANCE hInstance, HINSTANCE hPrevInstance, char* pcCmdLine, int nShowCmd?



  • msdn hilft...
    Also was ich bei allen Parametern eingeben soll weiß ich nun, aber:

    hInstance
    [in] Handle to the current instance of the application.

    Erm? Ich schreibe ein DLL PlugIn zu einem Programm, wo man ein Header dazubekommt. Woher soll ich dann den Handle wissen von diesem Programm?



  • In einer DLL hast Du keine WinMain, sondern eine DLLMain. Die Main-Funktion ist immer der Einsprungpunkt in das Programm bzw. die DLL. Die wird also beim Start des Programmes automatisch aufgerufen.



  • kompliziert kompliziert. also bei mir funktioniert alles. ich habe eine winmain(), eine callback funktion und aufgerufen habe ich winmain so:

    WinMain(NULL ,NULL ,NULL ,SW_SHOW);
    

    Unprofessionel und vielleicht ein bisschen falsch, ABER es läuft 😉



  • Ja, zufällig läuft das. Die Übergabe der Parameter hinstance sollte man aber immer dem System überlassen, da Du sonst möglicherweise Probleme mit dem Instanzenhandling bekommst.



  • Irgendwie schmeisst Du da immer noch einiges durcheinander! Eine DLL ist nichts weiter als eine Sammlung von Funktionen, die von einer zu schreibenden Anwendung - WinMain, etc. - benutzt werden können. Es ist also Quatsch, den Aufruf von WinMain auch noch in die DLL packen zu wollen. Capito?



  • ja aber ich brauche halt hinstance und so. die dll die ich mache ist wie gesagt für ein programm ein plugin. daher kann ich ins programm keine winmain einfügen oder so!



  • Du willst die hInstance der DLL?
    bekommst du über DllMain

    BOOL WINAPI DllMain(
      __in  HINSTANCE hinstDLL,
      __in  DWORD fdwReason,
      __in  LPVOID lpvReserved
    );
    

    oder über LoadLibrary

    HMODULE WINAPI LoadLibrary(
      __in  LPCTSTR lpFileName
    );
    

    Ahja HMODULE = HINSTANCE


Log in to reply