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

Dotnet Discussion :

Problème de compatibilité entre composant COM et 64 bits


Sujet :

Dotnet

  1. #1
    Membre à l'essai
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    23
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 23
    Points : 10
    Points
    10
    Par défaut Problème de compatibilité entre composant COM et 64 bits
    Bonjour bonjour ,

    j'ai besoin d'un coup de , étant donné que je suis coincé sur un problème assez costaud qui me donne beaucoup de fils à retordre

    Tout d'abord quelques précisions techniques :

    je développe sur VS2008, sur un win7 32 bits, avec en cible le framework 3.5 pour le projet qui m'intéresse.

    Le client pour lequel je travaille possède un système quelque peu vénérable, et utilise des composants logiciels en VB6.

    Pour lui proposer l'utilisation de nos libs C#, nous passons donc par un composant COM, qu'il peut appeler ensuite via les références de son projet VB6.

    Tout cela fonctionnait très bien sur leurs machines XP 32 bits, mais aujourd'hui ils migrent sur du seven 64 bits

    Le probème c'est que nos librairies avait un proc en x86 pour cible. Du coup je les ai modifié ainsi que leurs dépendances, pour qu'elles ciblent une plateforme "any CPU"

    A priori nos librairies fonctionnent toujours bien après ces modifications (remarque que le contraire eut été étonnant), et il n'y a pas de problème pour les inscrire en tant que composants COM (sur du 32 et du 64 bits)

    Par contre lors de l'appel de ce composant COM dans un prog VB6, je reçois un message d'erreur au lieu de l'exécution correcte habituelle

    Voici le message :



    (Je reçois ce message sur la machine qui me sert à compiler mes librairies, c'est-à-dire un win7 32 bits).

    J'ai bidouillé un peu mes classes (mis du comvisible(true) de partout, des trucs comme ça), mais ça n'a rien changé.

    2-3 détails supplémentaires :

    1) J'ai essayé aussi de compiler en x64, et j'obtiens les warnings suivant :

    A1 Génération de l'assembly -- L'assembly référencé 'mscorlib.dll' cible un processeur différent

    A2 Génération de l'assembly -- L'assembly référencé 'System.EnterpriseServices.dll' cible un processeur différent

    A3 Génération de l'assembly -- L'assembly référencé 'System.Data.dll' cible un processeur différent

    Sachant que ces librairies sont en version v2.0 et non 3.5 dans le .Net framework 3.5.

    2) J'utilise VMware pour tester l'exécution sur win7 64 bits.


    Je ne sais plus trop quoi faire, j'ai pas mal cherché sur le net mais j'ai rien trouvé qui m'aidait vraiment, du coup en désespoir de cause je viens ici troubler votre paisible après-midi du vendredi, trouble pour lequel je m'excuse sincèrement.

    Avez-vous un commencement d'idée sur la façon d'aborder ce shmilblick ?

    Cordialement, des bisous

    p.s : Désolé pour le pavé, j'ai mis des ptits smileys pour baliser un peu le texte du coup

    p.s 2 : je ne suis pas sûr d'avoir posté ma question au bon endroit, n'hésitez pas à me l'indiquer sèchement si je me suis trompé

  2. #2
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 222
    Points : 28 210
    Points
    28 210
    Par défaut
    Si ton client continu à faire ses programmes en VB6, tu peux te passer du mode 64bits. VB6 compile des programmes exclusivement 32bits.

    VB6 n'est pas compatible avec Windows 7 64bits. Même s'il est possible d'arriver à le faire fonctionner avec les modes de compatibilités il fonctionne souvent mal.

    Les programmes générés par VB6 peuvent aussi parfois rencontrer des problèmes de fonctionnement sous W7-64. Il faut jouer avec les modes de compatibilités d’exécution, notamment les faire tourner en mode XPSP3 voire XPSP2

  3. #3
    Membre à l'essai
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    23
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 23
    Points : 10
    Points
    10
    Par défaut
    En fait je sais que VB6 fonctionne sur le mode de compatibilité 32 bits. Le problème vient du fait que j'ai créé une librairie C#, que le client appelle via les composants COM dans son programme en VB6.

    Or cette librairie C# ne fonctionne sur win7 64 bits que si je la compile en mettant le mode "any_CPU" dans le paramètre "plateforme cible" du projet.

    Une fois cette nouvelle compilation en mode "any_CPU" faite, j'arrive à inscrire cette librairie C# dans les composants COM.

    Le problème c'est qu'ensuite j'obtiens, lors de son appel par le programme VB6, le message d'erreur que j'ai inséré ci-dessus.

    Et quand j'essaie de compiler ma lib C# en mode x64 only, j'obtiens les avertissements que j'ai cité précédemment. Je me disais que c'était un début de piste, mais je n'ai pas réussi à l'exploiter pour l'instant

    Dans tous les cas merci pour ces premiers éléments de réponse, je regarde si je peux obtenir quelque chose à propos des modes de compatibilités que tu as mentionné.

  4. #4
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 222
    Points : 28 210
    Points
    28 210
    Par défaut
    Citation Envoyé par Raymonde Voir le message
    Hors cette librairie C# ne fonctionne sur win7 64 bits que si je la compile en mettant le mode "any_CPU" dans le paramètre "plateforme cible" du projet.

    Une fois cette nouvelle compilation en mode "any_CPU" faite, j'arrive à inscrire cette librairie C# dans les composants COM.

    Le problème c'est qu'ensuite j'obtiens, lors de son appel par le programme VB6, le message d'erreur que j'ai inséré ci-dessus.
    C'est parce que tu enregistre ta librairie en 64bits. Il te faut la "Any_CPU" pour que la librairie possède du code 64bits et donc soit vue enregistrable.

    Hors pour ton programme VB6 il faut que ce soit la partie 32bits qui soit enregistrée.

    Tu l'enregistre comment ta librairie, en utilisant regsvr32.exe ?

    Il ne faut pas prendre celui qui est dans c:\windows\system32 qui, comme son nom ne l'indique pas, est la version 64bits, mais celui se trouvant dans c:\windows\syswow64

  5. #5
    Membre à l'essai
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    23
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 23
    Points : 10
    Points
    10
    Par défaut
    Ok oui ça parait logique (de compiler en "any_CPU") je signalais juste qu'en x64 bits il y avait ces warnings, au cas où cela puisse aider à la compréhension du problème.

    Ma librairie je l'inscrit en utilisant cette commande :

    C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\RegSvcs.exe /appname:C:\MonAppli MonAppli.dll

    C'est une piste à explorer, mais je me demande si le problème vient vraiment de là, car lorsque j'exécute mon code VB6, il ne me renvoie pas une erreur du type "composant COM introuvable", mais l'erreur sur mon 1er post.

  6. #6
    Membre à l'essai
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    23
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 23
    Points : 10
    Points
    10
    Par défaut
    Je suis toujours à la recherche d'une solution. Je cherche activement de mon coté, mais si vous avez la moindre suggestion, n'hésitez pas

    Bonne semaine tout le monde

  7. #7
    Membre à l'essai
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    23
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 23
    Points : 10
    Points
    10
    Par défaut
    Bien bien bien j'ai trouvé une solution :

    je compile en any_CPU pour la version de la lib qui est appelée directement par vb .net et c#, et je compile en x86 pour la version appelée via composant COM par vb6

    Merci de t'être intéressé à mon cas sevyc64

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème de compatibilité entre IE et FireFox
    Par paradeofphp dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 19/09/2006, 14h39
  2. Réponses: 5
    Dernier message: 16/03/2006, 00h09
  3. Réponses: 4
    Dernier message: 06/03/2006, 20h14
  4. Problème de compatibilité entre deux scripts
    Par frutix dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 20/01/2006, 14h24
  5. Problèmes de compatibilité entre sdk 9.0c et geforce 2/4
    Par Francky033 dans le forum DirectX
    Réponses: 2
    Dernier message: 01/10/2004, 14h22

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