Avatar billede tokelil Nybegynder
06. januar 2006 - 14:39 Der er 11 kommentarer og
1 løsning

Win64 possible loss of data warnings

Lige et hurtigt spørgsmål.
Jeg er skiftet til VS 2005.net og er ved at overføre et tidligere VS 6.0 projekt. Jeg har sat compileren til at give warning ved mulige Win64 fejl, så som cast af pointers til int mv.
Jeg er dog noget i tvivl om hvordan jeg løser nogen af de warnings. F.eks:

WNDPROC            QCDProc;
HWND            hwndPlayer;
SetWindowLongPtr(hwndPlayer, GWLP_WNDPROC, (LONG_PTR)QCDProc);
giver:
Warning    4    warning C4244: 'argument' : conversion from 'LONG_PTR' to 'LONG', possible loss of data

Hvordan løser jeg den slags warnings når jeg compiler til Win32?
Avatar billede jpk Nybegynder
06. januar 2006 - 15:07 #1
Når du kompilerer til Win32 er der jo ikke nogen grund til at have de varnings slået til...
Avatar billede tokelil Nybegynder
06. januar 2006 - 15:30 #2
Nej de har ingen betydning når jeg compiler til Win32, men jeg vil være sikker på de ikke giver problemer i fremtiden, når jeg vælger at compile til Win64.
Avatar billede bertelbrander Novice
06. januar 2006 - 20:34 #3
Måske:
SetWindowLongPtr(hwndPlayer, GWLP_WNDPROC, (LONG)(LONG_PTR)QCDProc);
Avatar billede tokelil Nybegynder
07. januar 2006 - 01:35 #4
Det vil muligvis fjerne warningen, men det vil vel også truncate QCDProc funktionspointeren til 32bit under Win64.
Avatar billede bertelbrander Novice
07. januar 2006 - 01:48 #5
På denne side:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/win64/win64/rules_for_using_pointers.asp

Skriver de netop at man skal bruge:
SetWindowLongPtr(hWnd, GWLP_WNDPROC, (LONG_PTR)MyWndProc);
Avatar billede tokelil Nybegynder
01. marts 2006 - 00:46 #6
Sorry, jeg ikke lige svaret i tidernes morgen, men ovenstående link var hvad jeg selv havde fundet frem til og det fjerne ikke de warnings.

Hvis du smider et svar bertelbrander, så får du pointene for indsatsen, så jeg kan lukke tråden.
Avatar billede bertelbrander Novice
01. marts 2006 - 00:48 #7
Du fik ikke løst problemet og jeg samler ikke på point.
Avatar billede bertelbrander Novice
01. marts 2006 - 00:51 #8
Iøvrigt er det vel jpk der har ret, en win32 funktion vil aldrig virke med 64 bit...
Avatar billede tokelil Nybegynder
01. marts 2006 - 00:55 #9
En del Win32 funktion virker stadig under Win64. For eks.:
-------------------------------
If you have window or class private data that contains pointers, your code will need to use the following new functions:

    * GetClassLongPtr
    * GetWindowLongPtr
    * SetClassLongPtr
    * SetWindowLongPtr

These functions can be used on both 32- and 64-bit Windows, but they are required on 64-bit Windows.
Avatar billede jpk Nybegynder
01. marts 2006 - 08:08 #10
1) Det er ikke Win32 funktioner (det er slet ikke funktioner)
2) Det er makroer og de er tilføjet for at fremtidssikre til Win64.

"will need to use" er ikke en korrekt statement, det burde være "should use".

Fx er SetWindowLongPtr makroen defineret således:
(kalder blot SetWindowLong hvis der kompileres til Win32)

#ifdef _WIN64
LONG_PTR SetWindowLongPtr(
    HWND hWnd,
    int nIndex,
    LONG_PTR dwNewLong
);
#else
#define SetWindowLongPtr SetWindowLong
#endif
Avatar billede tokelil Nybegynder
01. marts 2006 - 17:35 #11
Ja det er jeg klar over. Jeg går ud fra jeg ikke kan komme af med de kompiler warnings. (Hvilket desværre IMO betyder at man ikke kan bruge treat warnings as errors og Detect 64-bit portability issues sammen. (Lyder måske som en tosset ting at gå op i for nogen)

Anyway, er du interesseret i at smide et svar jpk, så jeg kan komme af med de point? :)
Avatar billede jpk Nybegynder
01. marts 2006 - 18:53 #12
Jeg bruger ikke selv "treat warnings as errors", jeg har blot vænnet mig til at fjerne de warnings der "kan" fjernes.
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