2016-07-14 11 views
1

Ich arbeite gerade an einer Konsolenanwendung für Windows 10 und frage mich, was der main() Einstiegspunkt sein sollte.Was ist der korrekte Einstiegspunkt für eine Win32-Konsolenanwendung?

In Jeffrey Richter und Christophe Nasarre des "Windows via C/C++" (2007) auf Seite 69, heißt es:

Ihre Windows-Anwendung eine Einstiegspunktfunktion ... als C haben muss/C++ Entwickler, gibt es zwei mögliche Einstiegspunktfunktion Sie verwenden können:

int WINAPI _tWinMain(HINSTANCE hInstanceExe, HINSTANCE, PTSTR pszCmdLine, int nCmdShow); 

int _tmain(int argv, TCHAR *argv[], TCHAR *envp[]); 

Das Buch zu identifizieren geht, dass diese beiden Einspeisepunkten tatsächlich abgebildet unterschiedliche Einstiegspunkte durch den Compiler, je nachdem, ob der Anwendung ist GUI oder Konsole und ob Un icode wird verwendet.

Ich möchte den richtigen Einstiegspunkt für eine Win32-Konsolen-App mit Unicode verwenden, also nehme ich an (?), Ich möchte die _tmain-Version jedoch beim Öffnen eines neuen Projekts in Visual Studio 2015 Community Edition auswählen „Win32-Konsole app“, und wählen Sie dann „Console Application“, beende ich mit Haupt-up() wie ich unter Linux gewohnt bin:

int main() 

Welche Einstiegspunkt sollte ich verwenden?

+1

ich würde 'wmain' und vermeiden' TCHAR' wie die Pest. http://stackoverflow.com/questions/2438049/what-is-the-difference-between-wmain-and-main –

+0

Danke für den Link. Ich stimme zu - TCHAR (wie ich es verstehe), wird auf wchar_t abgebildet, wenn UNICODE im Projekt definiert ist (was VS 2015 CE standardmäßig vorgibt), aber ist es eher ein Überbleibsel von wann mussten sich Leute um ANSI versus Unicode kümmern? – VariableX

+2

'TCHAR' in der Theorie ermöglicht es Ihnen, für Ansi oder Unicode zu kompilieren. In der Praxis werden Sie entweder nie für beide kompilieren oder wenn Sie es tun, wird nicht das einzige sein, was Sie ändern müssen. –

Antwort

-2

Der erste Eingangspunkt (oder eine Variante) für eine GUI-Prozess wird normalerweise verwendet:

int WINAPI _tWinMain(HINSTANCE hInstanceExe, HINSTANCE, PTSTR pszCmdLine, int nCmdShow); 

Der zweite Eintrag Punkt (oder Variation), die normalerweise für die Befehlszeilenprozess verwendet wird:

int _tmain(int argv, TCHAR *argv[], TCHAR *envp[]); 

Der Einstiegspunkt wird mithilfe der Link-Option/ENTRY festgelegt. Visual Studio legt dies für Sie fest, wenn Sie ein GUI/Console-Projekt erstellen, und oft müssen Sie es nicht ändern. Siehe: https://msdn.microsoft.com/en-us/library/f9t8842e.aspx

Das Präfix _T wird normalerweise verwendet, wenn mit tchar.h gearbeitet wird. Dadurch kann die Anwendung (in der Theorie) leicht als "Ansi" oder Unicode kompiliert werden. Sie können mehr über diese in einer früheren Antwort lauten:

What is the difference between _tmain() and main() in C++?

+1

Die Einstiegspunkte in der Frage und der Einstiegspunkt, den Sie über die Link-Option '/ ENTRY' setzen, sind unterschiedliche Dinge. Die ersteren sind die Signaturen und Symbole, die von der CRT verwendet werden, die letztere spezifiziert das Symbol, wie es von dem OS-Lader gesehen wird. – IInspectable