error C4772: #import 引用了缺少的类型库中的类型;“__missing_type__”用作占位符 解决办法

用#import方式引入Word类型库时出现该问题,引入方式:

#import "..\\import\\OFFICE12\\MSO.DLL" rename_namespace("Office"),named_guids,exclude("Pages"),rename("RGB","MSORGB"),rename("IAccessible","MSIaccessible")
using namespace Office;
#import "..\\import\\VBA\VBA6\\VBE6EXT.olb" rename_namespace("VBE6") 
using namespace VBE6; 
#import "..\\import\\Office11\\MSWORD.OLB" rename_namespace("MSWORD"),rename("ExitWindows","WdExitWindows"),rename("FindText","WdFindText")
using namespace MSWORD;


问题分析:

错误定位在第三个#import,即引入 MSWORD.OLB 时,此错误是说,在生成类型库文件时(.tlh, .tli),使用了无效的类型,这个类型改用__missing_type__代替


问题解决:

1.  找到 tlh、thi的文件生成目录,一般是在Debug/Release目录下,打开 MSWORD.OLB 对应的tlh文件,在里面搜索__missing_type__,搜到的结果为:

// Method 'DocumentSync' not emitted because argument 'SyncEventType' has invalid type: __missing_type__ 

virtual HRESULT __stdcall raw_DocumentSync (  /*[in]*/ struct _Document * Doc,   /*[in]*/ __missing_type__ SyncEventType ) = 0;

__declspec(implementation_key(5830)) HRESULT IApplicationEvents4::DocumentSync ( struct _Document * Doc, __missing_type__ SyncEventType );

。。。。。。


2.  从第一句可以看出,是 SyncEventType 无法识别

从网上搜 SyncEventType,大体判断这个应该是在 MSO.DLL 的类型库中定义的


3. 打开MSO.DLL 对应的 tlh 文件,在里面搜索SyncEventType ,搜到的结果为:

enum MsoSyncEventType;

enum MsoSyncEventType
{
    msoSyncEventDownloadInitiated = 0,
    msoSyncEventDownloadSucceeded = 1,
    msoSyncEventDownloadFailed = 2,
    msoSyncEventUploadInitiated = 3,
    msoSyncEventUploadSucceeded = 4,
    msoSyncEventUploadFailed = 5,
    msoSyncEventDownloadNoChange = 6,
    msoSyncEventOffline = 7
};


4. 看来应该就是这个了,MSO的类型库中声明的是MsoSyncEventType,而MSWORD.OLB 中引用的是不带Mso的,而SyncEventType有没在别处定义过


5. 根据上面的猜测,所以在生成MSO类型库时,将 MsoSyncEventType 强制改名为 SyncEventType,这样就可解决前面的报错问题了

改为:

#import "..\\import\\OFFICE12\\MSO.DLL" rename_namespace("Office"),named_guids,exclude("Pages"),rename("RGB","MSORGB"),rename("IAccessible","MSIaccessible"),rename("MsoSyncEventType","SyncEventType")


这种方法不一定靠谱,但我的项目中没有用到SyncEventType类型,也没有用到涉及该类型的方法,所以即使这么改有问题,对我的程序造成影响的可能性较小,

如果实在没法解决__missing_type__问题,可以考虑采用这种方式


附:可以先尝试删除自动生成的.tlh ,.tli文件,然后再重新编译,如果仍存在__missing_type__错误,再使用上面的办法

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据提供的引用内容,报错信息"error": "invalid_request", "error_description": "Missing grant type"是由于请求中缺少了grant type参数导致的\[1\]。在接口中,grant type参数是必需的,用于指定授权类型。在请求中添加grant type参数即可解决该错误。 另外,根据引用\[2\]中的接口定义,该接口是一个授权接口,需要用户登录。请求中需要包含response_type、client_id、redirect_uri、scope等参数。其中,response_type参数需要设置为"code",client_id参数需要设置为客户端的ID,redirect_uri参数需要设置为重定向的URI,scope参数需要设置为授权的范围。state参数是可选的,用于传递额外的状态信息。 最后,根据引用\[3\]中的内容,OAuth 2.0是一种用于授权的开放标准,可以用于实现第三方登录等功能。在开发开放平台时,需要选择适合的技术和选型方案。 综上所述,解决"error": "invalid_request", "error_description": "Missing grant type"错误的方法是在请求中添加grant type参数,并确保请求中包含了接口所需的其他参数。 #### 引用[.reference_title] - *1* [python post请求报错:{“error“:“invalid_request“,“error_description“:“Missing grant type“}](https://blog.csdn.net/qq_44667896/article/details/120043359)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [开放平台设计选型&代码编写](https://blog.csdn.net/qq_39905910/article/details/104749096)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值