Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Heiko

Frischling

  • »Heiko« ist der Autor dieses Themas

Beiträge: 19

Wohnort: @home

  • Private Nachricht senden

1

23.04.2009, 23:50

WinMain Frage

Also ich hab schon bisschen mit C++ rumprobiert, allerdings mache ich nebenbei auch noch ein Fernseminar...
Dummerweise wird ein stück code verwendet, der erst irgendwann später genauer erläutert wird.
Und zwar sind dort beispiele wo auch eine normale main funktion reichen würde, stattdessen wird dort überall die WinMain mit ihren parametern verwendet.
so hier

Quellcode

1
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow);


zum ersten warum wird da WINAPI geschrieben, und zum zweiten interessieren mich die übergebenen parameter.
Ich konnte schon deren bedeutung ergooglen, allerdings habe ich nichts zu deren verwendung gefunden.
wann nötig, zu welchem zweck....etc.

vielleicht kann mir ja jemand das ganze gedrössel da mal einfach erklären...
wäre supertoll.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

24.04.2009, 08:11

WIMAIN ist eine Aufrufkonvention (#define __stdcall WINMAIN).
http://de.wikipedia.org/wiki/Aufrufkonvention


http://msdn.microsoft.com/en-us/library/ms633559.aspx

Die Bedeutung sagt eigentlich eh schon fast alles über die Verwendung aus...

hInstance: Instanzhandle des Modules der .exe

hPrevInstance: Relilkt aus früheren Tagen, nicht mehr verwendet

lpCmdLine: Die Parameter die beim Start mitgegeben wurden

nCmdShow: Show Command. Gibt an wie dein Programm sein Fenster anzeigen soll (das gleiche was man an ShowWindow() übergibt).

3

24.04.2009, 14:01

Hier gibts auch weitere Informationen:
http://www.win-api.de/tutorials.php?tutid=2
MfG Shiver!

„Ideen sind nur Ausgangspunkte. Um zu wissen, was man zeichnen will, muss man zu zeichnen anfangen.“ Pablo Picasso

Ibot Development - Mein Weg zum eigenen 2D RPG

Heiko

Frischling

  • »Heiko« ist der Autor dieses Themas

Beiträge: 19

Wohnort: @home

  • Private Nachricht senden

4

24.04.2009, 14:51

Quellcode

1
hInstance: Instanzhandle des Modules der .exe 


ja aber wozu ist das vonnöten


und gleich noch eine andere frage zu stdcall.
dies kenn ich von dll importen.
stdcall sagt aber anscheinend nur, wie gelesen wird, richtig?

weil ich habs schon so gesehen.... _stdcall void _declspec....

sagt da das stdcall, wie alles was dannach kommt gelesen wird?!?
könnte man also auch weglassen.....
brauch da mal bisschen hilfe, um das zu verstehen.

5

24.04.2009, 15:08

Zitat von »"Heiko"«

Quellcode

1
hInstance: Instanzhandle des Modules der .exe 


ja aber wozu ist das vonnöten

z.B. bei CreateWindow() als Parameter, damit windows weis, zu welchem modul das fenster gehört.

Zitat von »"Heiko"«

und gleich noch eine andere frage zu stdcall.
[...]


_stdcall ist eine Aufrufkonvention, sprich, es sagt, das die parameter auf eine bestimmte weise an die funktion übergeben werden. Solange du dich nicht mit (inline-)assembler beschäftigst, musst du eigentlich nur wissen, das man die Aufrufkonvention korrekt angeben muss (korrekt kann auch heißen nicht), weil es sonst zu speicherfehlern kommt ;)

__declspec fingegen sagt aus, das das Symbol aus der dll exportiert wird. Alle Sachen aus dll dateien, die du von deinem Programm aus aufrufen willst (und auch tatsächlich in der dll stecken, keine inlines o.ä.), müssen beim build der dll mit __declspec(dllexport) deklariert sein, damit der Linker entsprechende verweise in die importbiliothek packt, und beim build eines gegen die dll linkenden programms mit __declspec(dllimport), damit der linekr die entsprechenden verweise in der importbiliothek sucht.

Heiko

Frischling

  • »Heiko« ist der Autor dieses Themas

Beiträge: 19

Wohnort: @home

  • Private Nachricht senden

6

24.04.2009, 15:47

sowas hier mein ich...

Quellcode

1
2
3
4
5
#define XDECL extern "C" __declspec(dllimport)
#define XCALL __stdcall


XDECL void XCALL xSetEntityEffect(Entity entity, Effect effect);



wobei ich grad bemerke, daß dort aus einer lib importiert bzw. gelinked wird, aber ich garkeinen hinweis zu der lib finden kann.

werden libs nur eingebunden und dann wird da drin automatisch gesucht?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

7

24.04.2009, 16:35

Zitat von »"Heiko"«

wobei ich grad bemerke, daß dort aus einer lib importiert bzw. gelinked wird, aber ich garkeinen hinweis zu der lib finden kann.


Naja der "Hinweis" steht vermutlich in den Linkereinstellugen des Projektes. Dort muss irgendwo die entsprechende lib angegeben sein...

Zitat von »"Heiko"«

werden libs nur eingebunden und dann wird da drin automatisch gesucht?


Naja so ähnlich. Extrem vereinfacht könnte man vielleicht so sagen: Der Linker sucht sich aus den libs die Sache die er braucht zusammen.

8

24.04.2009, 17:22

Zitat von »"Heiko"«

aber ich garkeinen hinweis zu der lib finden kann.

der hinweis, das die funktion in einer gelinkten lib steht, ist das __declspec(dllimport) ;)

Heiko

Frischling

  • »Heiko« ist der Autor dieses Themas

Beiträge: 19

Wohnort: @home

  • Private Nachricht senden

9

24.04.2009, 17:43

allet klar, ja im header wird oben die lib eingebunden, bzw. bekannt gemacht.

edit: an dem obigen beispiel abgeleitet, wie würde das aussehen müssen, wenn mans komplett umstellt, also wenns direkt aus der dll importiert wird?

edit2: irgendwo hab ich aber auch was über stdcall gesehen, welches aus eine dll funktionen importiert, oder verwechsel ich da was?

Werbeanzeige