30

Toutes les fonctions Windows fonctionnent en UTF-16 (ou ANSI mais c'est obsolète, sans déconner), et le framework .NET ne fait pas exception. Un char en C# (System.Char) est un caractère Unicode sur 16 bits (donc des fois il en faut 2 pour certains caractères particuliers), une chaîne (System.String) en .NET est une chaîne de caractères (System.Char) 16 bits. Tout en interne est toujours encodé en UTF-16LE (sur CPU intel au moins). Le seul endroit où tes données peuvent changer de format, et, traditionnellement, en changent, c'est lors du passage par un flux (fichier, mémoire, réseau, ... Et plus précisément, c'est fait par les classes dérivées de TextWriter ou BinaryWriter) qui va utiliser System.Text.Encoding pour convertir une chaîne en série d'octets, et utiliser par défaut System.Text.UTF8Encoding (souvent avec BOM, mais parfois sans, ça m'a surpris très récemment)

Je vois un moyen relativement simple de résoudre ton problème si c'est vraiment du .NET comme tu l'explique ^^
Normalement, tu peux héberger au sein de ton processus l'autre application (en gros, tu devrais créer un genre de lanceur/surcouche), et si tu as les autorisations de réflexion, tu peux bidouiller méchamment le fonctionnement interne de l'application (changer le comportement des composants, ou même les remplacer). En l'occurrence ce qui te pose problème doit avoir lieu au moment de la validation, donc tu peux par exemple détecter ça (en te déclarant receveur d'évènements là où il faut) et agir en conséquences. Pour le "agir en conséquences" par contre, ça dépend vraiment de comment l'application est codée en interne. Ça peut très bien être extrêmement complexe à réaliser, et donc pas du tout une bonne idée.

Quand à l'encodage inverse ANSI--[transfo UTF8->UTF16]-->UTF-16, ça n'a effectivement quasi aucune chance de fonctionner. Il y a des bits de redondance, aussi bien en UTF-8 qu'en UTF-16 (bon, UTF-16 est largement différent car ça dépend des "surrogate pairs", mais bref tongue), qui te permettent de savoir qu'un caractère est le début d'une séquence, et que le suivant fait bien partie de la séquence... En gros, seuls certains caractères "ASCII étendu" peuvent démarrer une séquence UTF-8, et seuls certains ("ASCII étendus" toujours) peuvent la continuer. Un caractère ASCII banal brise ta séquence, et il y a même quelques caractères interdits... bref ^^

(PS: désolé pour le cross, j'ai posté après ./22 tongue)
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

31

malheureusement ça n'est pas du .NET, l'appli est native ^^

(mais les informations restent intéressantes ^^)
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

32

Ah, alors je connais peut-être un moyen ! grin
Ça risque de demander un peu de reverse engineering via WinDbg (ou mieux si tu as mieux) pour comprendre le fonctionnement, mais tu peux utiliser detours pour "corriger" la vilaine application. trivil
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

33

LOL, un outil de runtime cracking distribué officiellement. grin
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

34

Bon, je vais peut-être pas l'utiliser dans ce cadre précis mais ça reste un outil qui peut sauver des vies en temps utile grin
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

35

Kevin Kofler : Bah, ltrace et strace sont distribués avec Linux aussi, hein grin
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

36

Effectivement, et LD_PRELOAD peut être très fun aussi. smile
Mais de la part d'une entreprise où tout est propriétaire et où modifier un logiciel est vu comme un crime, ça m'étonne quand-même. grin
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

37

LD_PRELOAD m'a déja sauvé la vie une paire de fois, et je regrette que ça n'existe pas sous win. Mais si y'a detour, ça peut être cool, faudra que je regarde en détails ^^

38

Heu, bidouiller les éxécutables sous windows est bien plus facile que sous linux d'un autre côté. Tant que tu n'as pas besoin de détourner les appels de fonctions réalisés par le programme lui-même c'est assez facile de faire ce que tu veux, sans même nécessairement entrer à l'intérieur du processus.
Après, detours te permet d'installer des hook de manière dynamique sur les fonctions appelées par le programme (ce qui a priori est statique avec LD_PRELOAD), et c'est d'ailleurs (tristement ?) comme ça que fonctionnait le UxTheme de Windows XP... (Oui oui, le machin qui faisait des fenêtres à bord arrondis)
C'est assez différent du fonctionnement de LD_PRELOAD et en même temps un peu plus puissant, mais rarement indispensable smile
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

39