REMPLACE CRT - UNICODE (WIN64)

excrt Messages postés 75 Date d'inscription mercredi 5 avril 2006 Statut Membre Dernière intervention 3 juillet 2006 - 13 avril 2006 à 19:32
excrt Messages postés 75 Date d'inscription mercredi 5 avril 2006 Statut Membre Derniè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.

https://codes-sources.commentcamarche.net/source/36939-remplace-crt-unicode-win64

excrt Messages postés 75 Date d'inscription mercredi 5 avril 2006 Statut Membre Derniè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és 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 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és 75 Date d'inscription mercredi 5 avril 2006 Statut Membre Derniè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

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 ...
Rejoignez-nous