Objet COM compatibilité de compilation entre Windows 7 et Windows XP

Résolu
romain60112 Messages postés 70 Date d'inscription mercredi 1 octobre 2008 Statut Membre Dernière intervention 17 avril 2013 - 26 août 2011 à 11:02
romain60112 Messages postés 70 Date d'inscription mercredi 1 octobre 2008 Statut Membre 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

8 réponses

romain60112 Messages postés 70 Date d'inscription mercredi 1 octobre 2008 Statut Membre Dernière intervention 17 avril 2013 1
1 sept. 2011 à 09:51
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
3
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
26 août 2011 à 12:28
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
0
romain60112 Messages postés 70 Date d'inscription mercredi 1 octobre 2008 Statut Membre Dernière intervention 17 avril 2013 1
26 août 2011 à 14:11
Les deux PC sont en 32 bits.
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
26 août 2011 à 19:11
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
romain60112 Messages postés 70 Date d'inscription mercredi 1 octobre 2008 Statut Membre Dernière intervention 17 avril 2013 1
29 août 2011 à 08:19
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
{
...
}
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
30 août 2011 à 19:28
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
0
romain60112 Messages postés 70 Date d'inscription mercredi 1 octobre 2008 Statut Membre Dernière intervention 17 avril 2013 1
31 août 2011 à 14:34
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
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
1 sept. 2011 à 00:12
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
0
Rejoignez-nous