Avatar billede riversen Nybegynder
17. april 2003 - 18:17 Der er 29 kommentarer og
1 løsning

Hvad betyder det her

int CDECL MessageBoxPrintf (TCHAR * szCaption, TCHAR * szFormat, ...)
{
    TCHAR  szBuffer [1024] ;
    va_list pArgList ;

    va_start (pArgList, szFormat) ;

    _vsntprintf (szBuffer, sizeof (szBuffer) / sizeof (TCHAR),
                  szFormat, pArgList) ;

    va_end (pArgList) ;

    return MessageBox (NULL, szBuffer, szCaption, 0) ;
}

specielt er jeg i tvivl om hvad int CDECL MessageBoxPrintf( bla bla ) betyder...mest det CDECL halløj

og så lige
    _vsntprintf (szBuffer, sizeof (szBuffer) / sizeof (TCHAR),
                  szFormat, pArgList) ;
Avatar billede arne_v Ekspert
17. april 2003 - 18:24 #1
_vsntprintf er en vsprintf variant for TCHAR.

Se:
  http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_crt__vsnprintf.2c_._vsnwprintf.asp

1. arg = buffer som resultat skal skrives i
2. arg = størrelse af buffer
3. arg = format streng (ligesom printf)
4. arg = pointer til alle argumenterne
Avatar billede arne_v Ekspert
17. april 2003 - 18:27 #2
cdecl er en calling convention ligesom stdcall og fastcall.
Avatar billede riversen Nybegynder
17. april 2003 - 18:33 #3
hvad gør vsntprintf helt nøjagtigt? den går vel ind og piller ved nogle af parametrerne? szBuffer ?

calling convention ? hvad har det af betydning for funktionen...hvad hvis jeg udelader?
Avatar billede riversen Nybegynder
17. april 2003 - 18:34 #4
det virker jo stadig hvis jeg udelader det, kan jeg se
Avatar billede riversen Nybegynder
17. april 2003 - 18:38 #5
tror jeg er med

teksten fra szFormat skal smides i szBuffer. Og de tmå ikke overstige det antal chars der er plads til = sizeof (szBuffer) / sizeof (TCHAR), right?

og pArgList skal bruges i forbindelse med formatering af szFormat... %i'erne...er det korrekt?
Avatar billede arne_v Ekspert
17. april 2003 - 18:39 #6
Du kender printf:

int a,b;
printf("%d %d\n",a,b);

så er der sprintf:

int a,b;
char buf[21];
sprintf(s,"%d %d\n",a,b);

vsprintf fungerer ligesom sprintf bare med en va_list i.s.f. a og b
d.v.s. at man tager alle de argumenter som kalderne er blevet kaldt med
via ... og bruger

_vsntprintf er sn sprintf for TCHAR.
Avatar billede arne_v Ekspert
17. april 2003 - 18:40 #7
va_list pArgList ;

    va_start (pArgList, szFormat) ;

gemmer en form for referance til alle argumenter efter szFormat
og og gemmer i pArgList.
Avatar billede riversen Nybegynder
17. april 2003 - 18:42 #8
ok...tak for det...det kommer nok et nyt spørgsmål om lidt :-)

men gider du lige fortælle, hvordan jeg får

sizeof (szBuffer) / sizeof (TCHAR)

med i Messageboxen...jeg får jo at vide den ikke kan konvertere til en char *
Avatar billede arne_v Ekspert
17. april 2003 - 18:44 #9
CDECL er default.

Men stdcall er jo ret udbredt (ofte forklædt som WINAPI).
Avatar billede riversen Nybegynder
17. april 2003 - 18:46 #10
det fatter jeg ikke så meget af, men ligemeget. Er ny indenfor cpp så mangler nok en del grundlæggende forståelse
Avatar billede arne_v Ekspert
17. april 2003 - 18:46 #11
Ikke forstået.

sizeof (szBuffer) / sizeof (TCHAR) er den maksimale længde _vsntprintf må skrive
i szBuffer.

Den skal vel ikke skrives ud ?
Avatar billede riversen Nybegynder
17. april 2003 - 18:48 #12
men hvis nu jeg gerne vil skrive den ud...

jeg fatter fx nada af hvorfor man i winnt.h laver en masse typedef af char *...kan ikke se hvorfor man skal til at skrive fx pchar, lpch, pch etc. Men der er jo forhåbentlig en dybere mening
Avatar billede riversen Nybegynder
17. april 2003 - 18:50 #13
ah...winapi er typedef af __stdcall
Avatar billede riversen Nybegynder
17. april 2003 - 18:50 #14
synes godt nok det er forbandet rodet, men det er måske fordi jeg er noob
Avatar billede riversen Nybegynder
17. april 2003 - 18:51 #15
eller define
Avatar billede arne_v Ekspert
17. april 2003 - 18:51 #16
stdcall and cdecl har noget at gøre med de instruktioner der bliver genereret
for at lave et funktions kald.

Det er vigtigt at man kalder med samme konvention som der forventes.
Avatar billede arne_v Ekspert
17. april 2003 - 18:53 #17
Hvis du vil se:

sizeof (szBuffer) / sizeof (TCHAR)

kan du vel bare konvertere den til en streng med en _vsntprintf og %d
format og så MessageBox'e den.
Avatar billede riversen Nybegynder
17. april 2003 - 18:53 #18
det siger mig stadig intet...nok igen pga. manglende indsigt

men tilbage til sizeof (szBuffer) / sizeof (TCHAR)
Avatar billede riversen Nybegynder
17. april 2003 - 18:53 #19
man kan ikke lave noget nemmere ligesom i java... "" + 3
Avatar billede arne_v Ekspert
17. april 2003 - 18:55 #20
MS har deres konventioner og sådan er det bare.

En af ideerne med det er at gøre det nemmere at flytte kode
mellem forskellige Windows platforme.
Avatar billede arne_v Ekspert
17. april 2003 - 18:56 #21
almindelig sprintf er lidt nemmere og hvis du er heldig så har
de itoa !
Avatar billede riversen Nybegynder
17. april 2003 - 18:56 #22
har du icq?
Avatar billede arne_v Ekspert
17. april 2003 - 18:57 #23
char buf[10];

itoa(123,buf,10)

vil lave en streng "123".

(men det er ikke "the windows way")
Avatar billede arne_v Ekspert
17. april 2003 - 18:58 #24
Jeg er for gammel til ICQ.

Kun email.
Avatar billede riversen Nybegynder
17. april 2003 - 18:59 #25
jeg er ved at hade cpp :-)
Avatar billede arne_v Ekspert
17. april 2003 - 19:10 #26
Der er et par ting du skal gøre dig klart:
  * C++ er et meget stort og komplekst sprog
  * Windows platformen har har en enorm mængde API'er og konventioner

Det tager tid at sætte sig ind i.
Avatar billede riversen Nybegynder
17. april 2003 - 19:13 #27
ja, jeg prøver også at slappe af, men det er jo irriterende, når det kører rimelig godt i java, ik. Og så når man er i gang med projekt der bare kræver en smule gui, at det så skal være så svært.
Avatar billede arne_v Ekspert
17. april 2003 - 19:17 #28
Hvorfor tror du så mange programmører vælger VB ? Ikke fordi Win32
programmering i C++ er nemt !

:-)
Avatar billede arne_v Ekspert
17. april 2003 - 19:17 #29
Skal det være C++ ?

Formentlig ville du føle dig mere hjemme i C#.
Avatar billede riversen Nybegynder
17. april 2003 - 19:19 #30
ja, et valgfag :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester