在 VC++ 程序中使用 MSOUTL.OLB 中的 #import 创建 .tlh 和 .tli 文件时出错

问题描述

我想创建 MSOUTL.OLB 文件.thl.tli 文件,因为我想使用结果 .thl 和 . tli 文件在我的 C++ 项目中使用 #include 语句。为此,我正在使用下面的代码行,它会引发如下所述的错误。知道为什么会这样吗?

#import "C:\\Program Files\\Microsoft Office\\root\\Office16\\MSOUTL.OLB" rename("copyFile","OlkcopyFile") named_guids

当我编译它时。它抛出以下错误

1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(6767): error C3646: 'Assistant': unkNown override specifier
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(6767): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(6777): error C3646: 'Assistance': unkNown override specifier
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(6777): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(6781): error C3646: 'COMAddIns': unkNown override specifier
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(6781): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(6783): error C3646: 'PickerDialog': unkNown override specifier
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(6783): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(6789): error C3646: 'LanguageSettings': unkNown override specifier
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(6789): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(6797): error C3646: 'AnswerWizard': unkNown override specifier
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(6797): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(6801): error C3646: 'MsoDebugOptions': unkNown override specifier
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(6801): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(6805): error C3646: 'DataPrivacyOptions': unkNown override specifier
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(6805): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(6815): error C3646: 'GetAssistant': unkNown override specifier
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(6815): error C2059: Syntax error: '('
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(6815): error C2238: unexpected token(s) preceding ';'
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(6830): error C3646: 'GetCOMAddIns': unkNown override specifier
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(6830): error C2059: Syntax error: '('
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(6830): error C2238: unexpected token(s) preceding ';'
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(6833): error C3646: 'GetLanguageSettings': unkNown override specifier
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(6833): error C2059: Syntax error: '('
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(6833): error C2238: unexpected token(s) preceding ';'
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(6835): error C3646: 'GetAnswerWizard': unkNown override specifier
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(6835): error C2059: Syntax error: '('
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(6835): error C2238: unexpected token(s) preceding ';'
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(6858): error C3646: 'GetAssistance': unkNown override specifier
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(6858): error C2059: Syntax error: '('
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(6858): error C2238: unexpected token(s) preceding ';'
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(6860): error C3646: 'GetPickerDialog': unkNown override specifier
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(6860): error C2059: Syntax error: '('
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(6860): error C2238: unexpected token(s) preceding ';'
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(6863): error C3646: 'GetMsoDebugOptions': unkNown override specifier
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(6863): error C2059: Syntax error: '('
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(6863): error C2238: unexpected token(s) preceding ';'
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(6864): error C3646: 'GetDataPrivacyOptions': unkNown override specifier
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(6864): error C2059: Syntax error: '('
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(6864): error C2238: unexpected token(s) preceding ';'
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(7087): error C3646: 'CreateContactCard': unkNown override specifier
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(7087): error C2059: Syntax error: '('
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(7088): error C2238: unexpected token(s) preceding ';'
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(7971): error C3646: 'CommandBars': unkNown override specifier
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(7971): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(8009): error C3646: 'GetCommandBars': unkNown override specifier
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(8009): error C2059: Syntax error: '('
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(8009): error C2238: unexpected token(s) preceding ';'
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(18001): error C3646: 'CommandBars': unkNown override specifier
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(18001): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(18057): error C3646: 'GetCommandBars': unkNown override specifier
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(18057): error C2059: Syntax error: '('
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(18057): error C2238: unexpected token(s) preceding ';'
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(21638): error C2556: 'Outlook::AddressEntryPtr Outlook::_AppointmentItem::Getorganizer(void)': overloaded function differs only by return type from '_bstr_t Outlook::_AppointmentItem::Getorganizer(void)'
1>  c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(21536): note: see declaration of 'Outlook::_AppointmentItem::Getorganizer'
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(21638): error C2371: 'Outlook::_AppointmentItem::Getorganizer': redeFinition; different basic types
1>  c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(21536): note: see declaration of 'Outlook::_AppointmentItem::Getorganizer'
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(28929): error C2039: 'GetAssistant': is not a member of 'Outlook::_Application'
1>  c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(6756): note: see declaration of 'Outlook::_Application'
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(28929): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(28929): error C2497: 'AssistantPtr': 'implementation_key' can only be applied to function declarations
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(28929): error C2146: Syntax error: missing ';' before identifier 'GetAssistant'
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(28939): error C2039: 'GetCOMAddIns': is not a member of 'Outlook::_Application'
1>  c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(6756): note: see declaration of 'Outlook::_Application'
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(28939): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(28939): error C2497: 'COMAddInsPtr': 'implementation_key' can only be applied to function declarations
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(28939): error C2146: Syntax error: missing ';' before identifier 'GetCOMAddIns'
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(28942): error C2039: 'GetLanguageSettings': is not a member of 'Outlook::_Application'
1>  c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(6756): note: see declaration of 'Outlook::_Application'
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(28942): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(28942): error C2497: 'LanguageSettingsPtr': 'implementation_key' can only be applied to function declarations
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(28942): error C2146: Syntax error: missing ';' before identifier 'GetLanguageSettings'
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(28944): error C2039: 'GetAnswerWizard': is not a member of 'Outlook::_Application'
1>  c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(6756): note: see declaration of 'Outlook::_Application'
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(28944): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(28944): error C2497: 'AnswerWizardPtr': 'implementation_key' can only be applied to function declarations
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(28944): error C2146: Syntax error: missing ';' before identifier 'GetAnswerWizard'
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(28956): error C2039: 'GetAssistance': is not a member of 'Outlook::_Application'
1>  c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(6756): note: see declaration of 'Outlook::_Application'
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(28956): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(28956): error C2497: 'IAssistancePtr': 'implementation_key' can only be applied to function declarations
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(28956): error C2146: Syntax error: missing ';' before identifier 'GetAssistance'
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(28958): error C2039: 'GetPickerDialog': is not a member of 'Outlook::_Application'
1>  c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(6756): note: see declaration of 'Outlook::_Application'
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(28958): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(28958): error C2497: 'PickerDialogPtr': 'implementation_key' can only be applied to function declarations
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(28958): error C2146: Syntax error: missing ';' before identifier 'GetPickerDialog'
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(28960): error C2039: 'GetMsoDebugOptions': is not a member of 'Outlook::_Application'
1>  c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(6756): note: see declaration of 'Outlook::_Application'
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(28960): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(28960): error C2497: 'MsoDebugOptionsPtr': 'implementation_key' can only be applied to function declarations
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(28960): error C2146: Syntax error: missing ';' before identifier 'GetMsoDebugOptions'
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(28961): error C2039: 'GetDataPrivacyOptions': is not a member of 'Outlook::_Application'
1>  c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(6756): note: see declaration of 'Outlook::_Application'
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(28961): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(28961): error C2497: 'DataPrivacyOptionsPtr': 'implementation_key' can only be applied to function declarations
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(28961): error C2146: Syntax error: missing ';' before identifier 'GetDataPrivacyOptions'
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(29006): error C2039: 'CreateContactCard': is not a member of 'Outlook::_NameSpace'
1>  c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(6960): note: see declaration of 'Outlook::_NameSpace'
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(29006): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(29006): error C2497: 'ContactCardPtr': 'implementation_key' can only be applied to function declarations
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(29006): error C2146: Syntax error: missing ';' before identifier 'CreateContactCard'
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(29137): error C2039: 'GetCommandBars': is not a member of 'Outlook::_Inspector'
1>  c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(21536): note: see declaration of 'Outlook::_AppointmentItem::Getorganizer'
1>c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(31671): error C2371: 'Outlook::_AppointmentItem::Getorganizer': redeFinition; different basic types
1>  c:\temp\testunicode\testunicode\x64\release\msoutl.tlh(21536): note: see declaration of 'Outlook::_AppointmentItem::Getorganizer'

任何帮助,如何解决这个问题?我需要添加任何引用或任何编译器选项吗?

解决方法

感谢@Simon Mourier,您需要先导入一个依赖项:

#import "C:\Program Files\Microsoft Office\Root\VFS\ProgramFilesCommonX86\Microsoft Shared\OFFICE16\MSO.dll" \
    rename("RGB","RGB_mso") rename("DocumentProperties","DocumentProperties_mso") \
    no_function_mapping

using namespace Office;

#import "C:\\Program Files\\Microsoft Office\\root\\Office16\\MSOUTL.OLB" \
    rename("GetOrganizer","GetOrganizer_msoutl") rename("CopyFile","CopyFile_msoutl") rename ("PlaySound","PlaySound_msoutl") \
    no_function_mapping

我重命名了所有在我的编译器 (VS Community 2019) 和我的类型库版本上发出重复警告的函数。我还添加了(未记录的)no_function_mapping 限定符,因为这些大型类型库的函数映射(根据 MS 是旧编译器的一些遗留功能)可能会导致罕见的问题:See SO answer here

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...