excrt
Messages postés75Date d'inscriptionmercredi 5 avril 2006StatutMembreDernière intervention 3 juillet 2006
-
13 avril 2006 à 19:32
excrt
Messages postés75Date d'inscriptionmercredi 5 avril 2006StatutMembreDernière intervention 3 juillet 2006
-
14 avril 2006 à 05:24
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
excrt
Messages postés75Date d'inscriptionmercredi 5 avril 2006StatutMembreDernière intervention 3 juillet 2006 14 avril 2006 à 05:24
puisque Win64 appel tout en __fastcall;
#ifdef WIN64
# define CALLCONV __fastcall
#else /* WIN32 */
# define CALLCONV __stdcall /* ou __cdecl ou autre ... */
#endif /* #ifdef WIN64 */
#define CALLCONVV __cdecl /* pour les fonctions à nombre variable d'arguments */
type CALLCONV function_0( type arg1[, type arg2[, ...]] );
type CALLCONVV function_1( type arg1[, type arg2[, ...]], ... );
...
ce n'est pas plus long écrire CALLCONV/CALLCONVV que __<fastcall|stdcall|cdecl>
ton argument ne tient pas, mais ce n'est pas grave, ce n'était qu'une suggestion ...
pour ce qui est du « L », puisque tu tiens à coder en UNICODE seulement, utilise donc des WCHAR et non des TCHAR, parce que les sources que tu postes, il n'y a pas que _toi_ qui les utilisent,
pense aux autres, non?
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 13 avril 2006 à 22:10
Je ne me prends pas pour DEMECO et me fous absolument de la portabilité.
Je ne ferai plus que unicode sur win64 donc le "L" restera, c'est plus court à taper.
Je ne vois pas ce qu'on gagne à tout regrouper, ces fonctions n'ont pas à être compilées séparément mais dans un proj et pas envie de me prendre la tête à savoir dans quel #ifdef je me trouve le jour où je voudrai faire une modif. Ceci d'autant plus que win64 appelle tout en fastcall, il faudrait aussi mettre les déclarations dans des multi #ifdef, donc désolé mais pas de temps à perdre.
excrt
Messages postés75Date d'inscriptionmercredi 5 avril 2006StatutMembreDernière intervention 3 juillet 2006 13 avril 2006 à 19:32
CHAR ansi_string[] = "chaine ici"; // <<<<<<< GOOD
WCHAR wide_string[] = L"chaine ici"; // <<<<<<< GOOD
TCHAR t_string[] = TEXT("chaine ici"); // <<<<<<< GOOD
un « TCHAR » n'est pas forcément un « WCHAR » ...
donc, avec les « TCHAR » oublies le « L » et utilise plutôt « TEXT() »
/* _WIN32_WINNT
*
* Windows Vista/Longhorn >= 0x0600
* Windows Server 2k3 >= 0x0502
* Windows XP >= 0x0501
* Windows 2k >= 0x0500
* Windows NT4 >= 0x0400
*
*/
/* _WIN32_WINDOWS
*
* Windows ME >= 0x0500
* Windows 98 >= 0x0410
* Windows 95 >= 0x0400
*
*/
/* _WIN32_IE
*
* IE 7.0 >= 0x0700
* IE 6.0 SP2 >= 0x0603
* IE 6.0 SP1 >= 0x0601
* IE 6.0 >= 0x0600
* IE 5.5 >= 0x0550
* IE 5.01 >= 0x0501
* IE 5.0/5.0a/5.0b >= 0x0500
* IE 4.01 >= 0x0401
* IE 4.0 >= 0x0400
* IE 3.0/3.01/3.02 >= 0x0300
*
*/
tu pourrais très bien mettre tes trois « pseudo-crt » en un seul et unique ...
ce serait beaucoup plus simple. tu n'aurais qu'a définir UNICODE(pour les versions unicode) et WIN32 ou WIN64 selon la plate-forme ... une compilation et tu obtients celui désiré ...
honnêtement, je ne vois pas comment ceci pourrait remplacer le CRT « original » ...
il est plutôt petit(minuscule) et pas très portable ... je ne l'ai pas testé, donc pour ce qui est du « fonctionnel », je l'ignore ...
14 avril 2006 à 05:24
#ifdef WIN64
# define CALLCONV __fastcall
#else /* WIN32 */
# define CALLCONV __stdcall /* ou __cdecl ou autre ... */
#endif /* #ifdef WIN64 */
#define CALLCONVV __cdecl /* pour les fonctions à nombre variable d'arguments */
type CALLCONV function_0( type arg1[, type arg2[, ...]] );
type CALLCONVV function_1( type arg1[, type arg2[, ...]], ... );
...
ce n'est pas plus long écrire CALLCONV/CALLCONVV que __<fastcall|stdcall|cdecl>
ton argument ne tient pas, mais ce n'est pas grave, ce n'était qu'une suggestion ...
pour ce qui est du « L », puisque tu tiens à coder en UNICODE seulement, utilise donc des WCHAR et non des TCHAR, parce que les sources que tu postes, il n'y a pas que _toi_ qui les utilisent,
pense aux autres, non?
13 avril 2006 à 22:10
Je ne ferai plus que unicode sur win64 donc le "L" restera, c'est plus court à taper.
Je ne vois pas ce qu'on gagne à tout regrouper, ces fonctions n'ont pas à être compilées séparément mais dans un proj et pas envie de me prendre la tête à savoir dans quel #ifdef je me trouve le jour où je voudrai faire une modif. Ceci d'autant plus que win64 appelle tout en fastcall, il faudrait aussi mettre les déclarations dans des multi #ifdef, donc désolé mais pas de temps à perdre.
13 avril 2006 à 19:32
WCHAR wide_string[] = L"chaine ici"; // <<<<<<< GOOD
TCHAR t_string[] = TEXT("chaine ici"); // <<<<<<< GOOD
TCHAR BruNews_string[] = L"chaine ici"; // <<<<<<< !!! BAD !!! MÔVÈS !!!
#ifdef UNICODE
typedef WCHAR TCHAR;
#else /* !UNICODE */
typedef CHAR TCHAR;
#endif
un « TCHAR » n'est pas forcément un « WCHAR » ...
donc, avec les « TCHAR » oublies le « L » et utilise plutôt « TEXT() »
/* _WIN32_WINNT
*
* Windows Vista/Longhorn >= 0x0600
* Windows Server 2k3 >= 0x0502
* Windows XP >= 0x0501
* Windows 2k >= 0x0500
* Windows NT4 >= 0x0400
*
*/
/* _WIN32_WINDOWS
*
* Windows ME >= 0x0500
* Windows 98 >= 0x0410
* Windows 95 >= 0x0400
*
*/
/* _WIN32_IE
*
* IE 7.0 >= 0x0700
* IE 6.0 SP2 >= 0x0603
* IE 6.0 SP1 >= 0x0601
* IE 6.0 >= 0x0600
* IE 5.5 >= 0x0550
* IE 5.01 >= 0x0501
* IE 5.0/5.0a/5.0b >= 0x0500
* IE 4.01 >= 0x0401
* IE 4.0 >= 0x0400
* IE 3.0/3.01/3.02 >= 0x0300
*
*/
tu pourrais très bien mettre tes trois « pseudo-crt » en un seul et unique ...
ce serait beaucoup plus simple. tu n'aurais qu'a définir UNICODE(pour les versions unicode) et WIN32 ou WIN64 selon la plate-forme ... une compilation et tu obtients celui désiré ...
honnêtement, je ne vois pas comment ceci pourrait remplacer le CRT « original » ...
il est plutôt petit(minuscule) et pas très portable ... je ne l'ai pas testé, donc pour ce qui est du « fonctionnel », je l'ignore ...