2016-03-16 1 views
0

Je suis en train d'importer un fichier comme ci-dessous:Un bug est survenu lorsque j'ai essayé d'importer un fichier "tlb". Le VS 2013 a dit qu'il ne pouvait pas trouver un fichier « TLH »

#import "C:/xxxx/Proj/msd60.tlb" 

Mais il me dit qu'il ne peut pas ouvrir le fichier source « C:/xxxx /Proj/msd60.tlh "

Le fichier tlb existe réellement à l'endroit où je le pointe. À mon avis, le VS peut diviser le fichier tlb en un fichier tlh (en tant que fichier d'en-tête) et un fichier tli (en tant que fichier cpp). Donc, quelque chose est arrivé et fait qu'il ne peut pas créer un fichier tlh? Mais je ne sais pas ce que c'est. Pendant ce temps, un autre cpp dans un autre projet peut ouvrir le "msd60.tlb". Donc, l'environnement peut ne pas exister de problèmes.

Comment résoudre ce problème?

Répondre

0

Il peut y avoir un problème avec la propriété que vous avez définie pour la sortie du compilateur MIDL. Dans les paramètres de votre projet, utilisez un chemin relatif pour l'emplacement .tlb plutôt qu'un chemin absolu. Visual Studio a une bizarrerie où il ne respecte parfois pas les chemins absolus.

Alternativement Si possible, essayez de créer à nouveau manuellement le fichier .tlb.

REGASM.exe "C:\Pathtoyourdll\your.dll" 
+0

Merci pour vos conseils. J'ai essayé la première solution et elle a encore échoué. Le deuxième que je ne peux pas essayer parce que le dossier de baignoire n'est pas créé par moi-même. Il est téléchargé des autres .. En tout cas, vraiment merci ~ –

0

J'ai eu le même problème avec msado20.tlb dans VS2015. Mais j'ai eu le même problème dans VS2013. Après quelques recherches, j'ai lu qu'il pourrait y avoir un problème avec les chemins absolus dans VS, il était préférable d'essayer le chemin relatif (ce qui est assez dérangeant). Dans mon cas, le projet est situé dans un lecteur différent, donc le chemin relatif serait vraiment long, donc j'ai plutôt copié le fichier msado20.tlb dans mon dossier de projet et reconstruire la solution. Dans ce cas, cela a fonctionné. Je sais que c'est plus un hack qu'une solution, mais ça peut aider les autres. La directive ressemble à ceci:

#import "msado20.tlb" no_namespace rename("EOF", "adoEOF") 

Si quelqu'un essaie le chemin relatif, il serait intéressant de savoir avec certitude que cela fonctionne. Copier le fichier dans mon dossier de projet ne sent pas une solution, mais un hack