Generating Headers for automating Excel, Outlook and word

Bala Ragothaman 21 Reputation points

We are looking to integrate an MFC application with Office Automation.
Our Dev environment is Visual Studio 2019 (Windows 10) and the Office version that we would like to automate is V16.0 aka Office -2021
Is there automatic or a non-automatic(command line) way to generate headers from the office file (MSO.dll) for every control, without reverting to using Office 2013 and VS 2017?


A high-level, general-purpose programming language, created as an extension of the C programming language, that has object-oriented, generic, and functional features in addition to facilities for low-level memory manipulation.
3,626 questions
Office Development
Office Development
Office: A suite of Microsoft productivity software that supports common business tasks, including word processing, email, presentations, and data management and analysis.Development: The process of researching, productizing, and refining new or existing technologies.
3,698 questions
0 comments No comments
{count} votes

Accepted answer
  1. RLWA32 43,041 Reputation points

    There are a couple of obvious problems with the MFC type library support in VS2019.

    1) The wizard does not see a registered type library unless it is a 32-bit type library registered under the win32 key.
    2) The wizard does not enumerate all the interfaces contained in a 64-bit type library contained in a file.

    Visual Studio 2022 has the same problem as no. 1 above. However, it seems to do better than VS2019 enumerating the interfaces contained in a 64-bit type library from a file.

    If picking and choosing specific interfaces is important to you I suggest you upgrade to VS2022. Otherwise, go with the #import directive to let the compiler create headers.

    0 comments No comments

4 additional answers

Sort by: Most helpful
  1. Castorix31 83,096 Reputation points

    In C++/Win32, it is done with #import

    For example, I have in some old source codes :

    #import "C:\Program Files (x86)\Microsoft Office\root\VFS\ProgramFilesCommonX86\Microsoft Shared\OFFICE16\mso.dll" rename("RGB", "MSRGB") rename("DocumentProperties", "WordDocumentProperties")  
     #import "C:\Program Files (x86)\Microsoft Office\root\VFS\ProgramFilesCommonX86\Microsoft Shared\VBA\VBA6\VBE6EXT.OLB" raw_interfaces_only, rename("Reference", "ignorethis"), rename("VBE", "testVBE")  
     #import "C:\Program Files (x86)\Microsoft Office\root\Office16\Excel.exe" exclude("IFont", "IPicture") rename("RGB", "ignorethis"), rename("DialogBox", "ignorethis"), rename("VBE", "testVBE"), rename("ReplaceText", "EReplaceText"), rename("CopyFile","ECopyFile"), rename("FindText", "EFindText"), rename("NoPrompt", "ENoPrompt")  

    or MSDN articles like : automate-excel-from-mfc-fill-data

    0 comments No comments

  2. Bala Ragothaman 21 Reputation points

    I was wondering If there a way to generate the header files from the type libraries, so that the full functionality (Fucntions and objects) of office automation is visible to visual studio 2019?

    In Visual studio, pre-2013, you were able to add typelib to the projects and choose the objects registered in the registry and the header files were autogenerated on the fly.


    0 comments No comments

  3. RLWA32 43,041 Reputation points

    In older versions of Visual Studio MFC's Class Wizard was the location where the tooling to create MFC Classes from type libraries could be invoked. This was relocated in VS2019.

    For an MFC project select Project->Add New Item and a dialog will open -


    Select the Installed->Visual C++->MFC node and you will see the following -


    Select MFC Class from TypeLib and click Add to see the following -


    I think this is what you are looking for to select type libraries and individual interfaces from which you can create MFC headers.

    0 comments No comments

  4. Bala Ragothaman 21 Reputation points

    Thanks for the note. This is exactly what I am looking for, except that the office 2021 (word, excel, outlook) type libraries(olb or tlb or dll's) doesn't seem to be available or registered in the registry.