Ein paar fragen zu Visual C++



  • Hmm schade ich habe leider nur die Express Edition und die wird nicht unterstützt 😕
    Traurig das solche Funktionen nicht implementiert werden.



  • bakoora schrieb:

    mit der IDE Netbeans für Java fand ich es immer sehr hilfreich, dass man nach dem "." Operator alle Methoden einer Klasse aufgelistet bekommen hat.
    Falls man z.B. nicht mehr genau weiss wie die Funktion hieß.

    Ich nutze zwar schon lange den Visual Assist, aber ich denke, du musst nach Eingabe von "." einfach CTRL+SPACE drücken, dann kriegst du deine Member-Liste. Wenn du eine Funktion aufrufst und der Cursor in der Parameterliste ist, kannst du mit CTRL+SHIFT+SPACE den Prototypen als Tooltip bekommen (Sorry, wenn irgendwas doch nicht stimmt).



  • Ich dachte eig eher, dass du die Member-Liste sofort angezeigt bekommst, wenn du . gedrückt hast.

    Man musste da nix mehr weiter eingeben, so hab ich es im Gedächtnis. 🙂



  • Danke für die Antworten.
    Werde gleich mal rum testen.



  • Das einzige was ich nun noch vermisse ist die Code Block Markierung -.-
    Sprich ich klicke eine { an und mir wird das Ende gezeigt.



  • Das würde Visual Assist X erledigen, auch in von dir gewählten Farben. 👍



  • Das wäre natürlich super, nur leider wird das nicht für die Express Edition unterstützt hmpf, doch Geld ausgeben -.-

    Ach ja wie deaktiviere ich den Unicode Zeichensatz oder wie lässt sich sowas umgehen ?

    LPCSTR winName;
    std:string str("Fenstername");
    
    /* convert string to LPSTR */
    winName  = str.c_str();
    

    Also wie kann ich ohne LPSTR o.ä. arbeiten ?
    z.B um der Funktion "FindWindow" ein einfaches const char* zu übergeben.

    const char *winName = "Fenstername";
    FindWindow ( NULL , winName );
    

    klappt nämlich nicht 😞



  • unter Project -> ... Properties -> Configuration Properties -> General -> Character Set kannst du Unicode de- / aktvieren

    wenn du das _T() Makro verwendest, dann hast du damit keine Probleme ob Unicode an oder aus ist 👍

    und dass Visual Assist unter Express nicht geht, wusste ich auch noch nicht 🙂

    Verstehe grad nicht, wieso du mit const char arbeiten musst, es reicht doch, wenn du einfach dein string übergibst, also

    FindWindow ( NULL , "Fenstername");
    

    sonst legst du (z.B.) einfach nen CString an, in dem dein Fenstername oder was auch immer steht



  • R3dNeXX schrieb:

    ...und dass Visual Assist unter Express nicht geht, wusste ich auch noch nicht :)...

    Eine Einschränkung der Express Edition ist, das man keinerlei Plugins installieren kann. Für Anfänger meistens eine eher unbedeutende Einschränkung, für die professionelle Entwicklung teilweise schon recht störend...



  • asc schrieb:

    R3dNeXX schrieb:

    ...und dass Visual Assist unter Express nicht geht, wusste ich auch noch nicht :)...

    Eine Einschränkung der Express Edition ist, das man keinerlei Plugins installieren kann. Für Anfänger meistens eine eher unbedeutende Einschränkung, für die professionelle Entwicklung teilweise schon recht störend...

    Alles klar, danke, dann verstehe ich das.
    Ist etwas anderes, wenn man bis jetzt nur die Prof gewohnt ist.



  • Ich habe den Zeichensatz jetzt auf Multi-Byte gesetzt.
    Aber nun klappt meine Funktion komischerweise nicht -.-
    Hier mal der Code:

    HANDLE OpenProcess ()
    {
    	const char *winName = "Counter-Strike Source";
        HANDLE winHandle = NULL;
        HWND window = NULL;
        DWORD procid;
    
        while ( true )
        {
    
              window = FindWindow( NULL , winName );
    
              if ( window == NULL ) {
                   Sleep ( 900 );
    			   std::cout << "not found." << std::endl;
                   continue;
                   }
              else {
    			   break;
                   }
        }
    
        GetWindowThreadProcessId ( window , &procid );
    
        winHandle = OpenProcess ( PROCESS_ALL_ACCESS , false , procid );
    
        if (!winHandle) 
    	{
    	return 0; 
    	}
        else 
    	{
    		return winHandle; 
    	}
    }
    

    Er findet zwar das Fenster aber gibt das HANDLE nicht zurück.
    In einer anderen IDE klappt diese Funktion jedoch o0

    Hier mal der Fehler wenn ich den Zeichensatz auf Unicode habe:

    error C2664: 'FindWindowW': Konvertierung des Parameters 2 von 'const char *' in 'LPCWSTR' nicht möglich
    

    Habe ich einen Fehler in der Funktion, oder stellt mir MSVC++ wieder ein Bein ? :>



  • Wieso nimmst du auch const char ?

    Ich dachte, ich hatte schonmal erwähnt, z.B. CString zu nehmen, ist auch leichter zu handeln.

    also z.B.

    CString winName = _T("Counter-Strike Source");
    HANDLE winHandle = NULL;    // = NULL kannst du dir auch sparen
    
    winHandle = FindWindow(NULL, winName);
    

    und durch die Verwendung von dem _T() Makro ist es egal, ob du Unicode oder Multibyte verwendest ! 👍



  • Die Fehlermeldung weist auch eigentlich eher darauf hin, dass du auf Unicode gestellt hast, nicht MBCS...

    Mal die Kurzfassung: FindWindow ist ein define, dass entweder FindWindowA oder FindWindowW bedeutet, je nachdem ob _UNICODE definiert ist oder nicht (du regelst das über die Projekteinstellungen). Hast du beispielsweise Unicode eingestellt, dann wird an die Stellen deines Codes, an denen FindWindow vorkommt, eben FindWindowW gesetzt. Die Funktion braucht dann einen LPCWSTR, keinen LPCSTR wie es bei FindWindowA der Fall sein würde. Dein const char* lässt sich nicht einfach nach LPCWSTR casten, also kriegst du eine Fehlermeldung, weil dein Argument den falschen Typ hat. Ein const wchar_t* würde funktionieren. Nimm einfach CString, hier wird nämlich auch je nach Unicode-Einstellung CStringA oder CStringW genommen. Stringliterale notierst du mit dem _T()-Makro, dass unterscheidet auch nach _UNICODE.

    Lies am besten nochmal nach, wie das alles funktioniert (Doku/Tutorial/Artikel/Buch). Genug Stichwörter hast du ja jetzt.



  • Ich dachte, ich hatte schonmal erwähnt, z.B. CString zu nehmen, ist auch leichter zu handeln.

    In der Express Edition wird weder MFC noch ATL unterstützt also klappt das mit CString auch leider nicht 😕



  • bakoora schrieb:

    Ich dachte, ich hatte schonmal erwähnt, z.B. CString zu nehmen, ist auch leichter zu handeln.

    In der Express Edition wird weder MFC noch ATL unterstützt also klappt das mit CString auch leider nicht 😕

    Ok, dann aber => falsches Forum! 🕶



  • bakoora schrieb:

    Ich dachte, ich hatte schonmal erwähnt, z.B. CString zu nehmen, ist auch leichter zu handeln.

    In der Express Edition wird weder MFC noch ATL unterstützt also klappt das mit CString auch leider nicht 😕

    Ok, hatte ganz vergessen, dass du nur ne Express hast !

    Aber stimmt, falsches Forum. 👍



  • Kann man den Zeichensatz automatisch auf MultiByte setzen ?
    Bzw. die Standarteinstellungen ändern, weil bei mir ist der Standart auf Unicode gesetzt.



  • bakoora schrieb:

    Kann man den Zeichensatz automatisch auf MultiByte setzen ?
    Bzw. die Standarteinstellungen ändern, weil bei mir ist der stan**** auf Unicode gesetzt.

    Nicht, dass ich wüsste (falls du doch was findest, sag Bescheid!). Die Riesen-Arbeit ist es aber eigentlich nicht, für ein Projekt 2 mal (Debug+Release) die Einstellung zu ändern. Damit kann ich leben...



  • Ja klar ist es keine große Arbeit aber schon ein bisschen nervig (:


Anmelden zum Antworten