Skip to content

CMake module for building IDL files with MIDL and generating CLR DLL using Tlbimp

License

Notifications You must be signed in to change notification settings

apriorit/FindIDL

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

FindIDL Build status

CMake module for building IDL files with MIDL and generating CLR DLL using Tlbimp.

Introduction

IDL is used for creating COM servers. Unfortunately CMake has a limited support for IDL, so this module comes to rescue. The Type Library Importer (Tlbimp) converts the type definitions found within a COM type library (TLB) into equivalent definitions in a common language runtime assembly. The output of Tlbimp.exe is a binary file (an assembly) that contains runtime metadata for the types defined within the original type library.

Requirements

  • CMake 3.0 or higher
  • MIDL compiler
  • Tlbimp.exe (optional)

Usage

find_package()

Add FindIDL to the module search path and call find_package:

list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/../cmake")
find_package(IDL REQUIRED)

FindIDL will search for midl.exe and tlbimp.exe

add_idl()

Takes two arguments: the name of the target project and idl file.

add_idl(<name> source)

Where:

  • <name> - name of the target project
  • source - full path to idl file

Example:

add_idl(GreeterIDL Greeter.idl)

The function does the same work as MIDL, specifically generates files:

  • Greeter_i.h
  • Greeter_i.c
  • Greeter_p.c
  • Greeter.tlb

To use the generated files the idl project should be linked as following

target_link_libraries(Main GreeterIDL)

add_idl() with tlbimp

Takes four arguments: the name of the target project, idl file, TLBIMP flag and the name of the tlbimp target.

add_idl(<name> source TLBIMP <tlbimp name>)

Where:

  • <name> - name of the target project
  • source - full path to idl file
  • TLBIMP - flag to indicate to run tlbimp
  • <tlbimp name> - name of the tlbimp target

Example:

add_idl(GreeterIDLWithTLBIMP Greeter.idl TLBIMP GreeterInterop)

The function does the same work as MIDL and tlbimp.exe, specifically generates files:

  • Greeter_i.h
  • Greeter_i.c
  • Greeter_p.c
  • Greeter.tlb
  • GreeterInterop.dll

To use the generated files the idl project should be linked as following

target_link_libraries(MainCpp GreeterIDL)

Or if you want to use the file generated by tlbimp:

target_link_libraries(MainCsharp GreeterInterop)

MIDL flags

To specify additional command-line options for midl set MIDL_FLAGS variabe.

set(MIDL_FLAGS /target NT60) # avoid MIDL2455 error

TLBIMP flags

To specify additional command-line options for tlbimp set TLBIMP_FLAGS variabe.

set(TLBIMP_FLAGS /silence:3002) # importing a type library into a platform agnostic assembly

Samples

Take a look at the samples folder to see how to use FindIDL.

License

Apriorit released FindIDL under the OSI-approved 3-clause BSD license. You can freely use it in your commercial or opensource software.

Version History

Version 1.0.2 (15 Aug 2019)

  • New: Add TLBIMP_FLAGS

Version 1.0.1 (08 Aug 2019)

  • New: Add tlbimp

Version 1.0.0 (26 Oct 2018)

  • Initial public release