Remplace crt - unicode (win64)

Soyez le premier à donner votre avis sur cette source.

Vue 5 880 fois - Téléchargée 228 fois

Description

Idem aux sources précédentes, cette fois UNICODE pour Windows x64.
Fait sur VS 2005 sous XP64.
En mode x64, VC interdit l'asm inline et aussi en fonctions standards, "__asm" n'est plus autorisé. Il faut donc revenir aux fichiers asm qu'on insère dans le projet, ce qui n'est pas plus mal vu qu'on retrouve toute la liberté du pur asm.
Manip (ultra simple) pour compil d'un asm avec restant du projet:
- Clic droit propriété sur le fichier asm.
- Régler sur Custom Build, Appliquer.
- Command Line: ml64.exe -c -Cx /nologo -Fo$(IntDir)\$(InputName).obj $(InputName).asm
- Outputs: $(IntDir)\$(InputName).obj
et voilà tout, copier coller ce qui est au dessus dans chaque champ et va bon.

Jeu de fonctions pour projets VC++ n'utilisant pas de CRT (utilisable aussi avec).
Toutes les fonctions retournant TCHAR* retournent le pointeur sur FIN d'écriture, ce qui évite tout strcat en permettant un chainage direct sur le pointeur retourné.

J'ai mis une dialog pour bien montrer qu'il n'y a pas d'erreur stack, ne se verrait pas forcément direct dans WinMain.
Tous les tests sont dans Tester() mis par blocs, suffit de commenter et décommenter chaque bloc pour tester les diverses fonctions.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

excrt
Messages postés
75
Date d'inscription
mercredi 5 avril 2006
Statut
Membre
Dernière intervention
3 juillet 2006
-
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
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
16 -
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
-
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 ...

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.