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

romain60112 70 Messages postés mercredi 1 octobre 2008Date d'inscription 17 avril 2013 Dernière intervention - 26 août 2011 à 11:02 - Dernière réponse : romain60112 70 Messages postés mercredi 1 octobre 2008Date d'inscription 17 avril 2013 Dernière intervention
- 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
romain60112 70 Messages postés mercredi 1 octobre 2008Date d'inscription 17 avril 2013 Dernière intervention - 1 sept. 2011 à 09:51
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

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 83 internautes ce mois-ci

Commenter la réponse de romain60112
NHenry 14229 Messages postés vendredi 14 mars 2003Date d'inscription 14 juillet 2018 Dernière intervention - 26 août 2011 à 12:28
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
romain60112 70 Messages postés mercredi 1 octobre 2008Date d'inscription 17 avril 2013 Dernière intervention - 26 août 2011 à 14:11
0
Merci
Les deux PC sont en 32 bits.
Commenter la réponse de romain60112
NHenry 14229 Messages postés vendredi 14 mars 2003Date d'inscription 14 juillet 2018 Dernière intervention - 26 août 2011 à 19:11
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
romain60112 70 Messages postés mercredi 1 octobre 2008Date d'inscription 17 avril 2013 Dernière intervention - 29 août 2011 à 08:19
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
NHenry 14229 Messages postés vendredi 14 mars 2003Date d'inscription 14 juillet 2018 Dernière intervention - 30 août 2011 à 19:28
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
romain60112 70 Messages postés mercredi 1 octobre 2008Date d'inscription 17 avril 2013 Dernière intervention - 31 août 2011 à 14:34
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
NHenry 14229 Messages postés vendredi 14 mars 2003Date d'inscription 14 juillet 2018 Dernière intervention - 1 sept. 2011 à 00:12
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.