error C4772: #import referenced a type from a missing type library; '__missing_type__'

本文记录了解决在使用#import“excel.exe”时出现的__missing_type__错误的过程。问题源于计算机安装了多个版本的Office或WPS,导致注册表项混乱。解决方法是保留一个Office版本,并删除多余的注册表项。

“关于__missing_type__ error”

1.error C4772: #import referenced a type from a missing type library; '__missing_type__' used as a placeholdererror                                         
2.C2516: '__missing_type__' : is not a legal base class      
3.error C2146: syntax error : missing ',' before identifier  'Adjustments'

Error如山1,2,3点,源代码从前辈那里拷来的,但是在他电脑上没有问题,在我电脑上就出现了这个奇怪的问题,自己搞了差不多一周,还是未能解决, 最后请教了下前辈总算解决了,这里做个记录,以免忘记,再遇到又不会了。这个问题主要来源于代码中使用了#import “excel.exe”。然后找了好多资料,却还是不是根本解决之法,仍然报错。

本人电脑上当前使用的是Office 2010,但是之前有安装过WPS,Office 2007版。网上有说是版本问题,所以我卸载了Office2010重新安装,或是卸载了安装2007版,也未能解决;弄了挺久,没办法了,请教了前辈,他看了半个小时不到,告诉我问题所在。尴尬!~ ~ ~ 是由于电脑安装了多个版本的Office,或是安装了WPS,在安装时,系统会增加一个注册表项,就算你卸载了之后,这个注册表项依然存在(360不知道能不能清除干净,这个没试过)。

程序导入excel.exe等相关库的时候,会去注册表项查找,然后找到对应的软件安装路径下找到对应的库。但是存在多个注册表项,可能造成查找混乱,找到的是已卸载了版本的注册表,所以就找不到需要的库文件,报这样的错误。(具体过程不清楚,感觉是这个流程,嘿嘿!)

解决方法:

最好只留一个Office 版本或是WPS,但是卸载之后要去删除对应的注册表项。
Win + R运行命令:regedit ; 在弹出的注册表编辑器中找到如下选项:
HKEY_CLASSES_ROOT\TypeLib{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}\2.5
右边会显示选择的项的信息,右键 --> 删除多余的即可。
我的是2.5,具体得视情况而定,可以看下留下来的版本的注册表项是多少,删除多余的就可以了。


由于找到的那个参考资料的链接不见了,所以自己记录一下,以免下次遇到又忘了怎么弄了。
感谢那位博主提供的参考方式,使我得以解决该问题。

在处理编译错误 `error #114: function &#39;Process_TemperatureData&#39; was referenced but not defined` 时,这通常意味着编译器在当前作用域中找不到该函数的定义。以下是几种可能的原因和对应的解决方法: ### 1. **函数未定义** 确保 `Process_TemperatureData` 函数在某个源文件中被正确定义。例如: ```c // Process_TemperatureData.c #include "Process_TemperatureData.h" void Process_TemperatureData(float *temperatureData, int length) { // 函数实现 for (int i = 0; i < length; i++) { // 处理温度数据 } } ``` 同时,确保该文件被包含在项目的构建系统中,例如 Makefile 或 IDE 的项目配置中。 ### 2. **函数声明未在头文件中** 如果函数在其他文件中定义,但在调用前未声明,编译器将无法识别该函数。确保在调用该函数的文件中包含其声明,例如: ```c // Process_TemperatureData.h #ifndef PROCESS_TEMPERATUREDATA_H #define PROCESS_TEMPERATUREDATA_H void Process_TemperatureData(float *temperatureData, int length); #endif // PROCESS_TEMPERATUREDATA_H ``` 然后在调用该函数的文件中包含该头文件: ```c #include "Process_TemperatureData.h" ``` ### 3. **函数名拼写错误** 检查函数名是否在定义和调用时完全一致,包括大小写和下划线等字符。例如,`Process_TemperatureData` 和 `process_temperaturedata` 会被视为不同的函数名。 ### 4. **函数定义未被正确编译** 确保包含 `Process_TemperatureData` 函数定义的源文件被正确编译,并且编译器能够找到该文件。如果使用 Makefile 或命令行编译,确保该文件被包含在编译命令中: ```makefile # Makefile 示例 CC = gcc CFLAGS = -Wall -Wextra OBJS = main.o Process_TemperatureData.o EXEC = temperature_app all: $(OBJS) $(CC) $(CFLAGS) $(OBJS) -o $(EXEC) clean: rm -f $(OBJS) $(EXEC) ``` ### 5. **静态库或动态库未正确链接** 如果 `Process_TemperatureData` 函数定义在某个静态库或动态库中,确保在链接阶段正确指定了该库。例如,在使用 `gcc` 编译时,确保链接器能够找到该库: ```bash gcc main.o -L/path/to/library -lmylibrary -o myprogram ``` ### 6. **名称修饰问题(C++ 项目)** 如果项目使用 C++,并且 `Process_TemperatureData` 是用 C 编写的函数,确保在 C++ 文件中使用 `extern "C"` 来避免名称修饰问题: ```c // Process_TemperatureData.h #ifdef __cplusplus extern "C" { #endif void Process_TemperatureData(float *temperatureData, int length); #ifdef __cplusplus } #endif ``` ### 7. **构建系统配置错误** 检查构建系统(如 Makefile、CMakeLists.txt 或 IDE 项目配置)是否正确包含了所有源文件和头文件路径。如果构建系统未正确配置,可能会导致某些文件未被编译或链接。 ### 8. **编译器缓存问题** 有时编译器缓存可能导致旧的编译结果未被更新。尝试清理项目并重新编译: ```bash make clean make ``` 如果使用 IDE,确保执行了完整的重新构建(Rebuild All)。 ---
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值