Question

J'ai besoin de quelques éclaircissements de base sur le couplage statique C ++. J'ai un fichier appelé data_client.lib. Il existe trois consommateurs indépendants pour le fichier de bibliothèque a.exe, b.exe et c.exe. Il existe un service appelé data_server.exe pour lequel data_client.lib est l'interface. En fait, j'ai ajouté une autre fonction à data_server.exe et l'interface correspondante à data_client.lib. Puisque tout a.exe a besoin de fonctionnalités supplémentaires, je ne construis que a.exe. J'ai expédié data_server.exe, data_client.exe et a.exe comme correctif. Maintenant, b.exe et c.exe se bloquent de manière aléatoire / inconsistante en jetant

  

mfc42u! CException :: `RTTI Complete   Object Locator '+ 0x10

Est-ce que cela a du sens? Si je construis aussi b.exe et c.exe, le crash ne se produit pas. Est-ce la façon dont cela fonctionne?

Était-ce utile?

La solution

  

En fait, j'ai ajouté une autre fonction à data_server.exe et l'interface correspondante à data_client.lib.

On comprend mal ce qui a été ajouté à votre bibliothèque. Cependant, s'il s'agit d'une nouvelle méthode ou de méthodes ajoutées à une classe (plutôt que de nouvelles fonctions autonomes), il y a de fortes chances que tout recompiler résoudra votre problème. La vtable peut ou non avoir été ébranlée par vos modifications.

Il est également possible que vos accidents n’aient absolument rien à voir avec cela et qu’un autre problème se produise ... mais, d’après votre description, mon argent concerne un problème lié à vtable. Si c’était moi, je recompilerais b.exe et c.exe et le testerais de nouveau avant d’enquêter sur d’autres problèmes.

Autres conseils

Peut-être que vous n’avez pas de dépendances explicites, mais certains de vos en-têtes de projet utilisent ou mettent implicitement des informations dans votre bibliothèque.

Je ne suis pas au courant de l'erreur, mais vos applications b.exe et c.exe utilisent une version antérieure de la bibliothèque de liaison pour communiquer avec une version plus récente du serveur de données data_server.exe. Certains index v_table peuvent être désactivés ou quelque chose si vous avez ajouté une fonction. Vous devez absolument reconstruire toutes les bibliothèques.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top