Fehlender Token bei Windows Funktion in VS Gui

03/26/2013 16:45 Hiris#1
Hejo,

wollte gerade

hGameWindow = FindWindow( NULL, LGameWindow); in der Visual Studios gui
ausführen, also

private: System::Void timer1_Tick(System::Object^ sender, System::EventArgs^ e) {
hGameWindow = FindWindow( NULL, LGameWindow); in der Visual Studios gui
}

Doch bekomme leider immer den Fehler

Fehler 1 error LNK2028: Nicht aufgel÷stes Token (0A000026) ""extern "C" struct HWND__ * __stdcall FindWindowA(char const *,char const *)" (?FindWindowA@@$$J18YGPAUHWND__@@PBD0@Z)", auf das in Funktion ""private: void __clrcall test::Form1::timer1_Tick(class System::Object ^,class System::EventArgs ^)" (?timer1_Tick@Form1@test@@$$FA$AAMXP$AAVObject@Sys tem@@P$AAVEventArgs@4@@Z)" verwiesen wird. C:\Users\Aleksander\Desktop\testsss\test\test\test .obj


und

Fehler 3 error LNK1120: 2 nicht aufgel÷ste Externe C:\Users\Aleksander\Desktop\testsss\test\Debug\tes t.exe 1


Aber nur wenn ich die windows.h funktion nutze, die deklaration und Definition ist kein Problem und verursacht auch keinen error....
03/26/2013 18:10 Schlüsselbein#2
Gegenfrage: Warum benutzt du C++/CLI?
03/26/2013 19:29 Delinquenz#3
Ich quote das hier immer wieder gern:
Quote:
Vielen Anfänger, welche C/C++ lernen wollen, suchen sich nach einer kostenlosen Entwicklungsumgebung und stossen dann früher oder später auf die Visual Studio 2008/2010 Express Edition.

Und ein Anfänger will natürlich gleich sichtbare Erfolge sehen und beginnt logischerweise gleich mit einer Fenster-Anwendung.

Leider enthält die VC2008/2010 Express Edition nur WinForms als graphische Oberfläche. Deshalb entwicklen die meisten dann nicht mit C/C++, sondern mit C++/CLI, was eine komplett andere Sprache ist und für die meisten nur zu Verwirrung führt.

Ich Rate jedem Anfänger davon ab VC 2008/2010 Express Edition für graphische Oberflächen zu verwenden, aus folgenden Gründen:

- Der WinForms-Designer ist miserabel, da er die Implementierung von Methoden in der h-Datei vornimmt, was spätestens zu Problemen führt, wenn man mehr als ein Form hat und auf Methoden/Properties des anderen Forms zugreifen will (da man dann zyklische Abhängigkeiten in den h-Dateien hat, die man nur lösen kann, wenn man die Implementierung in die cpp-Datei verlegt)
- Wenn man die Anwendung verteilen will, so muss man neben dem .NET-Framework auch die C-Runtime installieren; das muss man bei einer reinen .NET-Anwendung (z.B. C#) nicht
- C++/CLI ist primär als InterOp Sprache zwischen .NET und native Code gedacht; das sieht man auch schon daran, dass seit VC2008 auch der Data-Wizard für C++/CLI entfernt wurde. Daraus ergibt sich gleich der nächste Punkt:
- Der Data-Wizard wurde in VC 2008 entfernt um auch deutlich zu machen, dass der Focus auf native-managed InterOp liegt
- Ca. 99% aller Beispiele im Internet sind mit C#; man findet fast keine Beispiele in C++/CLI
- C++/CLI ist eine eigene Sprache und hat mit (ISO) C/C++ nichts zu tun; und das ganze zu mischen ist meistens noch viel sinnfreier, es sei denn, man weiss was man tut (was zu 99% nicht der Fall ist; zumindest in den Fragen, die ich aus den Foren entnehme)
- C++/CLI wird oft als “Erweiterung” von C/C++ gesehen. Diese Sicht ist aber komplett falsch! Ganz einfacher Beweis: Versuch in einen STL-Vector ein CLR Objekt reinzustopfen (z.B. std::vector). Wenn es gehen würde, dann könnte man C++/CLI als Erweiterung sehen. Es geht aber nicht. Deshalb sind es zwei komplett getrennte Welten!
- In VS 2010 wird es für C++/CLI Projekte kein Intellisense geben; das deutet auch stark darauf hin, dass es nicht als primäre Sprache für .NET geeignet ist

Empfehlung für Anfänger:
Wenn Ihr unbedingt graphische Oberflächen (RAD) machen wollt, dann nehmt lieber C# (gibt es auch als Express Edition).
Wenn Ihr wirklich C/C++ lernen wollt, dann nehmt die Professional-Version mit der MFC oder eine freie GUI-Bibliothek wie wxWidgets, GTK oder QT.

Empfehlung für Microsoft:
Wenn Ihr auch mit VC++ Anfänger erreichen wollt, dann liefert bitte die MFC in der Express-Edition mit; oder bindet von mir aus wxWidgets ein

[Only registered and activated users can see links. Click Here To Register...]