Bonjour,

Je viens du monde Java et mes connaissances C++ sont limitées: ce que j'avais appris en fac, loooong time ago + quelques projets de petite envergure...

J'hérite donc d'un projet important C++ (une dll) et j'accède à cette dll depuis Java (via JNI). Le projet C++ initial a été créé sous VS 6 et je l'ai porté sous VS 2008. Jusque là tout baigne.

En forçant une exception C++ à des fins de test, je retrouve dans le dump Java ceci:
...
0x00400000 - 0x00423000 C:\bin\java\bin\java.exe
0x7c920000 - 0x7c9e6000 C:\WINDOWS\system32\ntdll.dll
0x7c800000 - 0x7c912000 C:\WINDOWS\system32\kernel32.dll
0x77d70000 - 0x77e1d000 C:\WINDOWS\system32\ADVAPI32.dll
0x77c20000 - 0x77cbf000 C:\WINDOWS\system32\RPCRT4.dll
0x76f00000 - 0x76f13000 C:\WINDOWS\system32\Secur32.dll
0x7c340000 - 0x7c396000 C:\bin\java\jre\bin\msvcr71.dll
0x6d870000 - 0x6dac0000 C:\bin\java\jre\bin\client\jvm.dll
0x77f30000 - 0x77fc1000 C:\WINDOWS\system32\USER32.dll
0x77bd0000 - 0x77c18000 C:\WINDOWS\system32\GDI32.dll
0x76a50000 - 0x76a7f000 C:\WINDOWS\system32\WINMM.dll
0x6d320000 - 0x6d328000 C:\bin\java\jre\bin\hpi.dll
0x76b20000 - 0x76b2b000 C:\WINDOWS\system32\PSAPI.DLL
0x6d820000 - 0x6d82c000 C:\bin\java\jre\bin\verify.dll
0x6d3c0000 - 0x6d3df000 C:\bin\java\jre\bin\java.dll
0x6d860000 - 0x6d86f000 C:\bin\java\jre\bin\zip.dll
0x10000000 - 0x10430000 C:\tmp\trial\MyDLL.dll
0x71a80000 - 0x71a8a000 C:\WINDOWS\system32\WSOCK32.dll
0x71ad0000 - 0x71ae7000 C:\WINDOWS\system32\WS2_32.dll
0x77b70000 - 0x77bca000 C:\WINDOWS\system32\msvcrt.dll
0x71ac0000 - 0x71ac8000 C:\WINDOWS\system32\WS2HELP.dll
0x775c0000 - 0x7764b000 C:\WINDOWS\system32\OLEAUT32.dll
0x77480000 - 0x775b9000 C:\WINDOWS\system32\ole32.dll
0x78480000 - 0x7850d000 C:\WINDOWS\WinSxS\x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.21022.8_x-ww_D08D0375\MSVCP90.dll
0x78520000 - 0x785c3000 C:\WINDOWS\WinSxS\x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.21022.8_x-ww_D08D0375\MSVCR90.dll

....

Ce sont surtout les deux dernières DLL qui m'inquiètent, car situées dans WinSxs. La trace d'erreur est obtenue sur une machine 2K3 server sur laquelle j'avais recompilé le projet C++ et les deux DLL existent bel et bien dans WinSxS sur cette machine. Mais j'ai fait un test simple: j'ai copié dans le path les 2 DLL runtime et par la suite j'ai mis à la Corbeille le contenu du répertoire C:\WINDOWS\WinSxS\x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.21022.8_x-ww_D08D0375\ . A l'exécution, il y a un message d'erreur, comme quoi il ne trouve pas les bibliothèques nécessaires.

Deux questions:

1. Comment puis-je me débarasser du nom EN DUR dans ma DLL (à savoir, C:\WINDOWS\WinSxS\x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.21022.8_x-ww_D08D0375\MSVCP90.dll) et pouvoir mettre une copie de MSVCP90.dll dans le path (à côté de ma DLL que j'appelle depuis Java) ?

2. J'ai également constaté que à chaque fois que je refais un build de la DLL sous C++, VS 2008 me crée un nouveau répertoire sous C:\WINDOWS\WinSxS\ avec les deux DLL dedans (en fait il y en a une 3ème, toujours un runtime). Y a-t-il un moyen d'empêcher ce fonctionnement (car avec mon expérience C++ je vais compiler des centaines de fois et je pense à l'espace disque :-D :-D)

D'avance un grand merci.