Meilleur auteur de réponses
Problème migration C++ COM

Question
-
Bonjour,
Nous avons actuellement un projet DLL implémenté en C++ avec une interface COM. Qu'on a récemment passé de Visual Studio 6 vers Visual Studio 2010.
Le problème maintenant est que depuis qu'on compile le projet avec Visual Studio 2010, celui-ci plante dans le cas ou plusieurs processus utilisent en même temps les méthodes de l'objet COM. Or je n'ai jamais eu ce problème avec la compilation de ce projet sous Visual Studio 6.
Est-ce que quelqu'un à une idée sur l'origine de notre problème ?
Merci d'avance pour vos réponses.
Réponses
-
Bonjour
La réponse se trouve ici :
http://msdn.microsoft.com/en-us/library/z5hh6ee9(v=vs.100).aspx
Files opened by fopen_s and _wfopen_s are not sharable. If you require that a file be sharable, use _fsopen, _wfsopen with the appropriate sharing mode constant (for example, _SH_DENYNO for read/write sharing).
Donc dans votre situation, vous essayez d’ouvrir le même fichier plusieurs fois, et ça donne l’erreur.
Essayez de utiliser _wfsopen avec _SH_DENYNO pour éliminer les Warning aussi que l’erreur.
Cordialement,
- Marqué comme réponse Olivier Gil lundi 3 décembre 2012 13:33
Toutes les réponses
-
Bonjour
Pouvez-vous nous donner exactement le message d’erreur trouve dans l’Event Log ?
Merci
-
Bonjour,
Malheureusement il n'y a aucun message dans l'event log lors des plantages de l'application.
Mais bonne nouvelle, j'ai enfin trouvé l'origine du problème même si je la comprend pas trop pour le moment. Lors du passage de Visual Studio 6 à Visual Studio 2010, on a eu pas mal de warning sur l'utilisation de fonction "unsafe" et on a modifié notre code en conséquence pour ne plus avoir de warning.
Dans un test que j'ai effectué pour comprendre et surtout corriger le plantage. J'ai repris le code de Visual Studio 6 en le compilant juste avec Visual Studio 2010 (en ne modifiant que le strict minimum pour effectuer la compilation) et cette fois plus de plantage. Donc en corrigeant et testant régulièrement j'ai mis en évidence la fonction à l'origine du plantage.
Et il s'agit de la fonction _wfopen_s (_wfopen dans Visual Studio 6). On utilise la fonction pour effectuer les logs, voir le code ci-dessous :
FILE *hFile;
hFile = _wfopen(sCheminFichierLog, L"a"); // PAS DE PLANTAGE
SYSTEMTIME st;
GetLocalTime(&st);
char sDate[26];
sprintf_s(sDate, "%d%02d%02d", st.wYear, st.wMonth, st.wDay);
CreateDirectory("c:\\pupitre\\log\\clipro", NULL);
_bstr_t sCheminFichierLog = L"c:\\pupitre\\log\\clipro\\ObjCom_";
sCheminFichierLog += sDate;
sCheminFichierLog += L".inc";
_wfopen_s(&hFile, sCheminFichierLog, L"a"); // PLANTAGEsprintf_s(sDate, "%02d/%02d/%d %02d:%02d:%02d(:%03d)", st.wDay, st.wMonth, st.wYear, st.wHour, st.wMinute, st.wSecond, st.wMilliseconds);
fprintf_s(hFile, "%s %s \n", sDate, sText);
fclose(hFile); -
Bonjour
La réponse se trouve ici :
http://msdn.microsoft.com/en-us/library/z5hh6ee9(v=vs.100).aspx
Files opened by fopen_s and _wfopen_s are not sharable. If you require that a file be sharable, use _fsopen, _wfsopen with the appropriate sharing mode constant (for example, _SH_DENYNO for read/write sharing).
Donc dans votre situation, vous essayez d’ouvrir le même fichier plusieurs fois, et ça donne l’erreur.
Essayez de utiliser _wfsopen avec _SH_DENYNO pour éliminer les Warning aussi que l’erreur.
Cordialement,
- Marqué comme réponse Olivier Gil lundi 3 décembre 2012 13:33
-