Visual C++ 2005 Express Wie klar kommen damit?



  • Aber im Prinzip kann man damit doch auch Programme erstellen?

    Doppelklick im Form-Designer auf den Button. Dann öffnet sich der Quellcode, zumindest sah ich es schon so geschehen 😉

    ja dann komme ich in die Header Datei Form1.h in die aber wohl eher eine *.cpp Datei sein sollte. In die Header-Datei kann man auch nicht wirklich "normale"
    C/C++ Anweisungen reinpacken.



  • Das ist halt in der Version 2005 so gelöst, dass man in C++/CLI im Windows-Forms-Designer seinen Event-Code in die H-Datei schreiben muss (soll).

    Ich pers. würde sowieso Windows-Forms nur mit C# machen! Du machst nämnlich auch kein C++ sondern C++/CLI!!!



  • Aber in der Header Daeit kann man doch nicht "normal" C++ anwenden oder doch?
    Wo ist der Unterschied zwischen C++ und C++/CLI?





  • ok, Danke jetzt weiss ich wo der Unterschied liegt und das ich in die Header-Datei meinen C++/CLI Code schreiben muss. 🙂

    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
    				 MessageBox("lol",NULL,MB_OK);
    			 }
    

    aber wie muss ich den C++ Code nun abwandeln, dass er funktioniert? Denn wenn ich auf den Button zB eine MessageBox lege, was voher in C++ gefunzt hat, kommen die Fehlermeldungen 😞

    Error	1	error C2065: 'NULL' : undeclared identifier	h:\temp\hallo\fd\Form1.h	270
    Error	2	error C2065: 'MB_OK' : undeclared identifier	h:\temp\hallo\fd\Form1.h	270
    


  • OK, das mit den MessageBoxen habe ich hinbekommen mit Hilfe der Hilfe 😉
    nur sowas geht nicht:

    SHEmptyRecycleBin(NULL,NULL,SHERB_NOCONFIRMATION + SHERB_NOPROGRESSUI + SHERB_NOSOUND);
    

    sogar NULL ist undeclares und alle anderen Parameter auch.
    Ich denke mal das liegt an den Include Dateien. Nur wo kommen die rein?



  • Wenn Du schon C++/CLI verwendest, dann solltest Du auch Funktionen aus dem .NET-Framework verwenden!
    Also z.B: MessageBox::Show anstelle der PSDK MessageBox!

    Wenn Du das PSDK verwenden willst (wovon ich Dir eigentlich abrate), dann musst Du noch #include <windows.h> einbinden und zuerst natürlich das PSDK installiert haben (siehe WinAPI-Forum ganz oben!)



  • So langsam aber sicher blicke ich nicht mehr durch 🙄

    Also die Paltform SDK habe ich nach genau der Anleitung die da beschrieben wird eingerichtet.
    Aber wo binde ich die Headerdatei ein? In der Form1.h?
    Wenn ich nach dem .NET-Framework arbeite, wie kann ich dann die Windows API Funktionen nutzen?

    Fragen über Fragen. Ich bin noch nicht lange dabei also entschuldigt die vielen Fragen 🙂



  • -CH- schrieb:

    So langsam aber sicher blicke ich nicht mehr durch 🙄

    Also die Paltform SDK habe ich nach genau der Anleitung die da beschrieben wird eingerichtet.
    Aber wo binde ich die Headerdatei ein? In der Form1.h?

    Wo Du willst... am besten in der Datei woe die PSDK Funktionen nutzen willst...

    -CH- schrieb:

    Wenn ich nach dem .NET-Framework arbeite, wie kann ich dann die Windows API Funktionen nutzen?

    Nutzen kannst Du diese ganz einfach indem Du sie aufrufst... Aber wie schon gesagt; empfehlen würde ich es nur in den Fällen, wo es keine .NET Funktion dazu gibt. In den meisten Fällen gibt es aber eine passende .NET-Funktion, welche die PSDK-Funktion ersetzt.



  • OK, aber wie komme ich nun an die .NET Funktion bzw wenn ich die PSDK benutze funktioniert das auch nicht

    #include <windows.h>
    #pragma once
    ...
    #pragma endregion
    	private: System::Void Papierkorb_Click(System::Object^  sender, System::EventArgs^  e) {
    	SHEmptyRecycleBin(NULL,NULL,SHERB_NOCONFIRMATION + SHERB_NOPROGRESSUI + SHERB_NOSOUND);
    	 }
    	};
    }
    

    Fehler:

    Error	1	error LNK2028: unresolved token (0A00000E) "extern "C" long __stdcall SHEmptyRecycleBinW(struct HWND__ *,wchar_t const *,unsigned long)" (?SHEmptyRecycleBinW@@$$J212YGJPAUHWND__@@PB_WK@Z) referenced in function "private: void __clrcall Papierkorbleeren::Form1::Papierkorb_Click(class System::Object ^,class System::EventArgs ^)" (?Papierkorb_Click@Form1@Papierkorbleeren@@$$FA$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z)	Papierkorb leeren.obj	
    Error	2	error LNK2019: unresolved external symbol "extern "C" long __stdcall SHEmptyRecycleBinW(struct HWND__ *,wchar_t const *,unsigned long)" (?SHEmptyRecycleBinW@@$$J212YGJPAUHWND__@@PB_WK@Z) referenced in function "private: void __clrcall Papierkorbleeren::Form1::Papierkorb_Click(class System::Object ^,class System::EventArgs ^)" (?Papierkorb_Click@Form1@Papierkorbleeren@@$$FA$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z)	Papierkorb leeren.obj
    

    😞
    Bei VC 6 ging alles vorher



  • Für diese Funktion gibt es leider kein pedant in .NET... also musst Du es doch via PSDK machen 😢
    Dir fehlt einfach noch die passende LIB (das wäre aber auch in VC6 so gewesen).

    #pragma comment(lib, "shell32.lib")
    

    PS: VC6 hat kein C++/CLI
    PPS: Wenn Du so wie in VC6 programmieren willst, dan verwende die MFC und kauf Dir die Standard-Version.



  • Ich danke dir sehr Jochen
    Jetzt funzt alles so weit 🕶

    Das ich in VC 6 programmieren möchte müsste nicht unbedingt sein, nur da ich vorher nur mit VC 6 gearbeitet habe vergleiche ich alles damit. 😉 Wenn es mit hilfe des .Net-Framework auch anders geht ist es für mich auch OK 😉



  • Hab doch noch ne Frage 🙂

    Wenn ich eine Funktion beim Programm Start ausfürhren möchte, wo muss ich die da hinschreiben das die dann ausgeführt wird?



  • ne der Fehler lag woanderes. Die Funktion beim Start aufzurufen ist kein Problem nur das zum ini datei auslesen hat das Programm immer zum absturz gebracht:
    diese API funktion verursacht fehler:

    GetPrivateProfileString
    

    😞



  • Vermutlich verwendest Du diese falsch, was dann zum Absturz führt...

    AUch würde ich Dir empfehlen Einstellungen in einer XMl-Datei abzulegen und via XmlSerializer diese zu lesen/schreiben.


Anmelden zum Antworten