12

En fait, le format des librairies ne varie pas vraiment d'une version à l'autre, mais le runtime de Visual C++ (MSVCRT) est mis à jour à chaque nouvelle version (MSVCRT6, MSVCRT7, MSVCRT8, MSVCRT9, MSVCRT10, …)
Le problème de conflit (comme je pensais qu'il risquait de se présenter), c'est que tu lies de manière statique deux versions différentes du runtime (la version 8 et la version 10), ce qui crée donc un conflit. La partie liée de manière dynamique ne pose pas de problème (si ce n'est que tu vas charger en mémoire deux versions différentes de MSVCRT simultanément), mais la partie statique est plus problématique. Mais passons sur ce problème pour l'instant puisque tu l'as résolu au moins temporairement.

Normalement, d'après l'extrait que j'ai copié plus haut, sdl_main.h va renommer ton main(int argc, const char *argv[]) en SDL_main(int argc, const char *argv[]).

Comme ton projet est un projet C++, les noms de fonctions sont décorés par le compilateur (l'algorithme dépend du compilateur, et même parfois de la version de celui-ci), contrairement à ce qui se passe en langage C brut. La décoration en soi est un détail interne, mais, ça permet de supporter entre autres la surcharge de méthodes, ce que e langage C ne permet pas. (La décoration tient compte de la convention d'appel, du type des paramètres, du type de la valeur de retour, …)
Mais ta fonction main doit être définie comme une fonction C. La déclaration dans le fichier sdl_main.h devrait normalement remplir ce rôle, mais comme tu n'as pas spécifié le même prototype (char **argv au lieu de char *argv[]), je me demande si ça ne pourrait pas être le problème. (Il se peut que ton SDL_main et que le SDL_main défini par sdl_main.h soient vus comme deux fonctions distinctes par le compilateur, et que ta fonction main soit exportée comme une fonction C++)

Essaye de corriger le prototype de ton main pour qu'il corresponde à ce qui est indiqué dans sdl_main.h. Si cela fonctionne, ta fonction devrait être reconnue comme une fonction C, appelée avec la convention d'appel cdecl, et donc exportée en « _SDL_main » (la décoration par défaut pour cdecl est de préfixer le nom de la fonction par un _, stdcall procède de manière similaire, mais ajoute à la fin de la fonction un @N où N indique la taille en octets des paramètres de la fonction… (D'où _WinMain@16 en 32 bits))
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