2010-09-21 11 views
2

le système que je travaille avec se compose de:Appel aC# .dll de C++ natif du code visuel

  • Une application front-end écrit en VB très probablement ou bien VC++ (ne sais pas, n » t et ne peut pas avoir les sources pour elle)
  • un VC++ non géré .dll
  • AC# .dll

l'application appelle la première dll, la première dll appelle différentes méthodes de la seconde.
Afin de rendre la première dll capable de voir et d'appeler le code C# J'ai suivi ce guide: http://support.microsoft.com/kb/828736
La seule différence est que je ne suis pas en compilant avec/clr: oldSyntax, si je ne puis changer l'autre compilation dépendante options fait le premier chargement incorrect de DLL à partir de l'application.

Tout se compile facilement; l'ensemble de l'installation a même bien fonctionné initialement, mais après avoir complètement développé mon code à travers les deux DLL, je reçois maintenant une erreur dans l'application. L'erreur est:

Erreur d'exécution '-2147417848 (80010108)': Erreur Automation

L'objet invoqué a déconnecté de ses clients.

Et se produit lorsque la ligne suivante est exécutée dans la première dll:

MyManagedInterfacePtr ptrName(__uuidof(MyManagedClass)); 

J'ai essayé de reproduire une configuration entièrement fonctionnel mais sans succès.

Des idées sur comment diable j'ai réussi à le faire en premier lieu? Ou alternativement sur d'autres approches pour faire fonctionner les deux DLL ensemble?

Merci d'avance!

Répondre

1

Il s'agit d'une erreur COM de bas niveau associée à RPC. Cela est normalement utilisé dans les serveurs hors processus, mais cela ne ressemble pas à votre configuration. Il serait également utilisé si vous faites des appels sur une interface COM à partir d'un autre thread. Une cause possible est que le thread qui a créé l'objet COM a été autorisé à quitter, en appelant CoUninitialize et en supprimant l'objet COM. Un appel ultérieur effectué à partir d'un autre thread générerait cette erreur. Obtenir une référence erronée (appeler la version trop souvent) pourrait aussi causer cela. Abordez ceci en traçant avec soin quels threads créent un objet COM et combien de temps ils survivent.

+0

Merci pour votre réponse, car pour moi, il était impossible de déboguer l'application appelant la DLL, j'ai fini par réécrire le code C# en C++ non géré. Cela m'a pris quelques jours mais à la fin tout a bien fonctionné. – Spookyone

Questions connexes