我是靠谱客的博主 传统豆芽,最近开发中收集的这篇文章主要介绍error C4772: #import 引用了缺少的类型库中的类型;“__missing_type__”用作占位符,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

环境:cpu64,win7 64操作系统,vs2008,office2013,wps2013个人版

1.由于换了一个笔记本,xp->win7,office2010->2013,wps2012->2013,导致原来的代码不能用了

原始代码:

#import "lib/wps/2012.8.1.0.2998/kso10.dll"  rename("RGB", "KsoRGB") rename("DocumentProperties","KsoDocumentProperties")
using namespace KSO;
#import "lib/wps/2012.8.1.0.2998/wpscore.dll" auto_search auto_rename no_auto_exclude
编译后:

1>e:kqprint_newkqprint_newkqprintwpsoper.h(7) : error C4772: #import 引用了缺少的类型库中的类型;“__missing_type__”用作占位符
1>e:kqprint_newkqprint_newkqprintdebugwpscore.tlh(1931) : error C2516: “__missing_type__”: 是非法基类
1>        e:program files (x86)microsoft visual studio 9.0vcincludecomdef.h(283) : 参见“__missing_type__”的声明
1>e:kqprint_newkqprint_newkqprintdebugwpscore.tlh(1931) : error C2146: 语法错误 : 缺少“,”(在标识符“ColorFormat”的前面)
1>e:kqprint_newkqprint_newkqprintdebugwpscore.tlh(1932) : error C2499: “WPS::ColorFormat”: 类不能是其自身的基类
1>e:kqprint_newkqprint_newkqprintdebugwpscore.tlh(1935) : error C2516: “__missing_type__”: 是非法基类
1>        e:program files (x86)microsoft visual studio 9.0vcincludecomdef.h(283) : 参见“__missing_type__”的声明
1>e:kqprint_newkqprint_newkqprintdebugwpscore.tlh(1935) : error C2146: 语法错误 : 缺少“,”(在标识符“FillFormat”的前面)
1>e:kqprint_newkqprint_newkqprintdebugwpscore.tlh(1936) : error C2499: “WPS::FillFormat”: 类不能是其自身的基类

........

2.百度:error C2516: “__missing_type__”: 是非法基类

参考http://bbs.wps.cn/forum.php?mod=viewthread&tid=22331586,换成

#import "D:Program Files (x86)KingsoftWPS Office9.1.0.4715office6ksoapi.dll"  
#import "D:Program Files (x86)KingsoftWPS Office9.1.0.4715office6wpsapi.dll" rename_namespace("WPS")
编译后:

1>e:hbjtest3test0722test0722debugwpsapi.tlh(22067) : warning C4003: “ExitWindows”宏的实参不足
1>e:hbjtest3test0722test0722debugwpsapi.tlh(22067) : error C2059: 语法错误 : “常量”
1>e:hbjtest3test0722test0722debugwpsapi.tlh(29762) : error C2146: 语法错误 : 缺少“;”(在标识符“VBE”的前面)
1>e:hbjtest3test0722test0722debugwpsapi.tlh(29762) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>e:hbjtest3test0722test0722debugwpsapi.tlh(29762) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>e:hbjtest3test0722test0722debugwpsapi.tlh(29979) : error C2146: 语法错误 : 缺少“;”(在标识符“GetVBE”的前面)
1>e:hbjtest3test0722test0722debugwpsapi.tlh(29979) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>e:hbjtest3test0722test0722debugwpsapi.tlh(29979) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>e:hbjtest3test0722test0722debugwpsapi.tlh(29979) : warning C4183: “GetVBE”: 缺少返回类型;假定为返回“int”的成员函数
........

3.百度,google:warning C4003: “ExitWindows”宏的实参不足

参考:http://bbs.csdn.net/topics/300159601

但是wps2013没有VBE6EXT.OLB,用vbeapi.dll代替

改成:

#import "D:Program Files (x86)KingsoftWPS Office9.1.0.4715office6vbeapi.dll"
#import "D:Program Files (x86)KingsoftWPS Office9.1.0.4715office6ksoapi.dll"  
#import "D:Program Files (x86)KingsoftWPS Office9.1.0.4715office6wpsapi.dll" rename_namespace("WPS")
编译后:

1>e:hbjtest3test0722test0722debugvbeapi.tlh(632) : error C2146: 语法错误 : 缺少“;”(在标识符“CommandBars”的前面)
1>e:hbjtest3test0722test0722debugvbeapi.tlh(632) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>e:hbjtest3test0722test0722debugvbeapi.tlh(632) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>e:hbjtest3test0722test0722debugvbeapi.tlh(653) : error C2146: 语法错误 : 缺少“;”(在标识符“GetCommandBars”的前面)
1>e:hbjtest3test0722test0722debugvbeapi.tlh(653) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>e:hbjtest3test0722test0722debugvbeapi.tlh(653) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>e:hbjtest3test0722test0722debugvbeapi.tlh(653) : warning C4183: “GetCommandBars”: 缺少返回类型;假定为返回“int”的成员函数
1>e:hbjtest3test0722test0722debugvbeapi.tli(244) : error C2143: 语法错误 : 缺少“;”(在“VBE::VBE::GetCommandBars”的前面)
1>e:hbjtest3test0722test0722debugvbeapi.tli(244) : error C2433: “_CommandBarsPtr”: 不允许在数据声明中使用“inline”
1>e:hbjtest3test0722test0722debugvbeapi.tli(244) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>e:hbjtest3test0722test0722debugvbeapi.tli(244) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int

.....

4.继续google:缺少“;”(在标识符“CommandBars”的前面)

但是没有什么结果了,于是心灰意冷,直接用

#import "D:Program Files (x86)KingsoftWPS Office9.1.0.4715office6wpsapi.dll" auto_search auto_rename no_auto_exclude
结果编译通过

百度auto_search用法,

http://msdn.microsoft.com/zh-cn/subscriptions/downloads/0346ezww%28v=vs.90%29.aspx

http://technet.microsoft.com/zh-cn/library/298h7faa

auto_search 指定当使用 #import 引用了类型库,并且它本身引用了另一个类型库时,编译器可以为其他类型库执行隐式 #import。 

原来造成上边的原因是wpsapi.dll引用了其他类库

// Cross-referenced type libraries:
//
//  #import "D:Program Files (x86)KingsoftWPS Office9.1.0.4715office6ksoapi.dll"
//  #import "C:Program Files (x86)Common FilesMicrosoft SharedVBAVBA6VBE6EXT.OLB"

则另一种代码也可以编译通过:

#import "D:Program Files (x86)KingsoftWPS Office9.1.0.4715office6ksoapi.dll"
#import "C:Program Files (x86)Common FilesMicrosoft SharedVBAVBA6VBE6EXT.OLB"
#import "D:Program Files (x86)KingsoftWPS Office9.1.0.4715office6wpsapi.dll"/* auto_search,*/rename("ExitWindows","_ExitWindows")

总结:引用的类库可以通过wpsapi.thi文件查看,而auto_search居然可以自动查找类库,否则你就得自己指定了


最后

以上就是传统豆芽为你收集整理的error C4772: #import 引用了缺少的类型库中的类型;“__missing_type__”用作占位符的全部内容,希望文章能够帮你解决error C4772: #import 引用了缺少的类型库中的类型;“__missing_type__”用作占位符所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部