Я пытаюсь импортировать файл, как показано ниже:
#import "C:/xxxx/Proj/msd60.tlb"
Но он говорит мне, что не может открыть исходный файл «C: /xxxx/Proj/msd60.tlh»
Файл tlb фактически существует в том месте, куда я его указываю.
По моему мнению, VS может разделить файл tlb на файл tlh (как файл заголовка) и файл tli (как файл cpp). Так что-то случилось, и сделать это не может создать файл TLH? Но я не знаю что это. Между тем, другой cpp в другом проекте может открыть «msd60.tlb». Так что с окружающей средой могут не существовать проблемы.
Как это решить?
У меня была такая же проблема с msado20.tlb в VS2015. Но у меня была такая же проблема в VS2013. После некоторого исследования я прочитал, что может быть некоторая проблема с абсолютными путями в VS, при этом лучше всего было попробовать относительный путь (что весьма беспокоит).
В моем случае проект расположен на другом диске, поэтому относительный путь будет очень длинным, поэтому я вместо этого скопировал файл msado20.tlb в папку своего проекта и заново собрал решение. В этом случае это сработало. Я знаю, что это скорее взлом, чем решение, но это может помочь другим. Директива выглядит так:
#import "msado20.tlb" no_namespace rename("EOF", "adoEOF")
Если кто-то попробует относительный путь, было бы интересно узнать наверняка, как он работает. Копирование файла в папку моего проекта — не решение проблемы, а взлом
Может быть проблема со свойством, которое вы установили для вывода компилятора MIDL.
В настройках вашего проекта используйте относительный путь для местоположения .tlb, а не абсолютный путь. Visual Studio имеет причуду, в которой иногда не учитываются абсолютные пути.
вперемежку
Если возможно, попробуйте снова создать .tlb вручную.
REGASM.exe "C:\Pathtoyourdll\your.dll"