IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Visual C++ Discussion :

Enregistrement dll COM


Sujet :

Visual C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    dus
    dus est déconnecté
    Membre confirmé
    Homme Profil pro
    Informatique industrielle
    Inscrit en
    Octobre 2002
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2002
    Messages : 98
    Par défaut Enregistrement dll COM
    Bonjour,

    Je viens de migrer une appli C++ non managé de VS2005 à 2015. Tout s'est relativement bien passé, excepté pour une dll COM.
    Je précise que tous les projets sont configurés en v140_xp.
    La dll en question compile correctement, est générée en configuration release x86, s'enregistre correctement sur le poste windows 7 64 bits sur lequel VS2015 est installé, l'appli y fonctionne correctement.
    Sur un poste XP 32 bits qui représente la cible principale sur laquelle l'appli sera déployée, pas moyen d'enregistrer la dll.
    Message de Regsvr32 : LoadLibrary a echoué - L'accès à cet emplacement de la mémoire n'est pas valide.

    Dependency walker ne remarque aucune dépendance manquante.
    J'ai bien installé le redistributable de VC2015.

    Si je remplace la dll COM en question par sa version précédente compilée sous 2005, que j'installe le redistributable VC2005, l'enregistrement fonctionne, et l'appli tourne.

    J'ai beau faire le tour des propriétés du projet, je ne remarque rien de transcendant...

    Une idée ?

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 488
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 488
    Par défaut
    Question con, elle est bien 32bits, votre Dll ?

  3. #3
    dus
    dus est déconnecté
    Membre confirmé
    Homme Profil pro
    Informatique industrielle
    Inscrit en
    Octobre 2002
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2002
    Messages : 98
    Par défaut
    Oui oui, c'est la première chose que j'ai vérifié.

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Un test intéressant serait de tenter toi-même un LoadLibrary() de la DLL en question dans un programme.
    Et aussi, vérifier si elle ne fait rien de bizarre dans:
    • son DllMain(),
    • Les constructeurs de ses objets en variables globales (appelés par _DllMainCrtStartup() avant l'appel à DllMain())
      Y compris, vérifier que tu n'as pas d'objets globaux dépendant d'autres objets globaux...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    dus
    dus est déconnecté
    Membre confirmé
    Homme Profil pro
    Informatique industrielle
    Inscrit en
    Octobre 2002
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2002
    Messages : 98
    Par défaut
    Je viens de voir dans les propriétés du projet, au niveau des valeurs héritées du préprocesseur la valeur _USING_V110_SDK_. Celle-ci n’apparaît pas dans les autres projets de l'appli.
    Malgré le fait que Dependency walker n'indique pas de dépendance à MFC110 mais à MFC140, j'ai tenté d'installer le redistributable VC 2012 sur la cible XP... pour voir..., mais le problème reste entier.

  6. #6
    dus
    dus est déconnecté
    Membre confirmé
    Homme Profil pro
    Informatique industrielle
    Inscrit en
    Octobre 2002
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2002
    Messages : 98
    Par défaut
    Je viens de générer un exe avec le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    	HINSTANCE hInstLib;
    	hInstLib = LoadLibrary(TEXT("COM_Client_SAF_NVGT.dll"));
    	if (hInstLib == NULL)
    	{
    		DWORD dwError = GetLastError();
    		CString sTemp;
    		sTemp.Format(_T("%i"), dwError);
    		GetDlgItem(IDC_EDIT1)->SetWindowTextW(sTemp);
     
     
    	}
    	else
    		GetDlgItem(IDC_EDIT1)->SetWindowTextW(_T("LoadLibrary OK"));
    J'ai le message LoadLibrary OK sur le poste W7 64 bits et sur le poste XP 32 bits.

  7. #7
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 488
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 488
    Par défaut
    OK pour le DllMain et les globales, maintenant, il se passe quoi si vous appelez la fonction "DllRegisterServer" de la Dll après le chargement de celle-ci ?
    https://msdn.microsoft.com/fr-fr/lib...or=-2147217396

Discussions similaires

  1. Réponses: 1
    Dernier message: 10/02/2009, 21h30
  2. Réponses: 1
    Dernier message: 03/03/2008, 15h26
  3. [DLL] Enregistrer DLL (COM) par programmation
    Par pataguillon dans le forum MFC
    Réponses: 5
    Dernier message: 14/03/2006, 14h01
  4. Réponses: 16
    Dernier message: 22/03/2005, 21h57
  5. Les composants : ATL, DLL, COM, OCX, ...
    Par Pucpood dans le forum Windows
    Réponses: 3
    Dernier message: 04/07/2003, 10h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo