Objet COM compatibilité de compilation entre Windows 7 et Windows XP [Résolu]

Messages postés
70
Date d'inscription
mercredi 1 octobre 2008
Dernière intervention
17 avril 2013
- - Dernière réponse : romain60112
Messages postés
70
Date d'inscription
mercredi 1 octobre 2008
Dernière intervention
17 avril 2013
- 1 sept. 2011 à 09:51
Bonjour à tous,

Je suis confronté à un problème de compatibilité entre windows XP et windows 7 pour l’exécution d'un objet COM, je m'explique :

1) J'ai une DLL C# compilé sous Windows 7
- Quand je l'utilise sous Windows 7 ça tourne impeccable
- Quand je l'utilise sous windows XP ça ne fonctionne pas

2) J'ai donc recompilé cette DLL sous Windows XP
- Quand je l'utilise sous Windows 7 ça ne fonctionne pas
- Quand je l'utilise sous windows XP ça tourne impeccable

3) Conclusion il y a un problème de compatibilité en windows 7 et XP du à la compilation mais quoi ?

Il y a t-il des options particulière a cocher ?

Quelqu'un as t-il des informations à ce sujet ?


4) Voici l'erreur obtenue pour le code suivant:


HRESULT hr = CoCreateInstance(CLSID_InterfaceImplementation, NULL, CLSCTX_INPROC_SERVER, IID_ManagedInterface, reinterpret_cast<void**>(&cpi));

if (FAILED(hr))
{
MessageBox("Impossible de créer l'objet COM"); // ERREUR OBTENUE
return FALSE;
}
else
{
...
}

Merci d'avance
Romain
Afficher la suite 

Votre réponse

8 réponses

Meilleure réponse
Messages postés
70
Date d'inscription
mercredi 1 octobre 2008
Dernière intervention
17 avril 2013
3
Merci
Merci NHenry,

Le problème est maintenant résolu, la DLL C# exposée via COM fonctionne sur le poste où elle est compilée parce qu'elle est également déployée automatiquement sur ce même poste !

Par contre sur un autre poste, cela ne marchais pas car elle n'y est pas déployée correctement...je l'ai donc installé sur l'autre machine avec le "regasm.exe" et ça roule.

Aucun lien entre donc windows XP et windows 7.

a+
Romain

Merci romain60112 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 105 internautes ce mois-ci

Commenter la réponse de romain60112
Messages postés
14319
Date d'inscription
vendredi 14 mars 2003
Dernière intervention
11 décembre 2018
0
Merci
Bonjour,

Question bête, est-ce que sur Seven, tu serais en 64 bits ?

Dans ce cas, force la compilation en x86 (32 bits).

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
Commenter la réponse de NHenry
Messages postés
70
Date d'inscription
mercredi 1 octobre 2008
Dernière intervention
17 avril 2013
0
Merci
Les deux PC sont en 32 bits.
Commenter la réponse de romain60112
Messages postés
14319
Date d'inscription
vendredi 14 mars 2003
Dernière intervention
11 décembre 2018
0
Merci
Bonjour,

"ça ne fonctionne pas "
Un message d'erreur ou un comportement incorrect ? ça aidera pour le diagnostique.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
Commenter la réponse de NHenry
Messages postés
70
Date d'inscription
mercredi 1 octobre 2008
Dernière intervention
17 avril 2013
0
Merci
Enfaite l'objet COM ne ce créer pas.

HRESULT hr = CoCreateInstance(CLSID_InterfaceImplementation, NULL, CLSCTX_INPROC_SERVER, IID_ManagedInterface, reinterpret_cast<void**>(&cpi));

if (FAILED(hr))
{
MessageBox("Impossible de créer l'objet COM"); // ERREUR OBTENUE
return FALSE;
}
else
{
...
}
Commenter la réponse de romain60112
Messages postés
14319
Date d'inscription
vendredi 14 mars 2003
Dernière intervention
11 décembre 2018
0
Merci
Bonjour,

Pourquoi ne pas utiliser CreateObject ?

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
Commenter la réponse de NHenry
Messages postés
70
Date d'inscription
mercredi 1 octobre 2008
Dernière intervention
17 avril 2013
0
Merci
Actuellement je procède comme ceci :

- je travail sous visual studio 2005 framework 2.0

- j'ai 2 projets :

**Une DLL (MF_LoaderEIA.dll) qui est développé en C# qui utilise une InterfaceImplementation (Wrapper), la DLL est inscrit COM Interop pour être utilisé dans un environnement non managé (C++)

public interface ManagedInterface
{
...
}
public class InterfaceImplementation : ManagedInterface
{
...
}

**Une Application qui est développé en C++ (non managé) et qui utilise MF_LoaderEIA.dll (Objet COM)


- Dans l'Application j'appelle la DLL comme ça :

#import ".\\file\MF_LoaderEIA.tlb" no_namespace named_guids

ManagedInterface *cpi = NULL;

CoInitialize(NULL);

HRESULT hr = CoCreateInstance(CLSID_InterfaceImplementation, NULL, CLSCTX_INPROC_SERVER, IID_ManagedInterface, reinterpret_cast<void**>(&cpi));
if (FAILED(hr))
{
MessageBox("Impossible de creer l'objet COM");
return FALSE;
}
else
{
...
}

NHenry, tu me propose d'utiliser un CreateObject, comment procéder ? L’intérêt d'utiliser un CreateObject plutôt qu'un CoCreateInstance ?

Romain
Commenter la réponse de romain60112
Messages postés
14319
Date d'inscription
vendredi 14 mars 2003
Dernière intervention
11 décembre 2018
0
Merci
Bonjour,

Désolé, j'étais en pensée VB, pas C#.

Sinon, regardes ces liens :
http://www.novicksoftware.com/TipsAndTricks/tip-csharp-create-com-object-by-progid.htm
http://social.msdn.microsoft.com/Forums/en-US/csharplanguage/thread/0231a89f-f3ab-4bde-a9bc-39cf96c59444/
http://www.codeproject.com/KB/COM/safecomwrapper.aspx

Je pense que ça sera plus simple que ta méthode actuelle.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
Commenter la réponse de NHenry

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.