Search code examples
delphicomautomationidldelphi-xe6

How to import IDL into Delphi?


How do i import an Interface Definition Language (idl) file into Delphi; converting the types and interfaces to a pascal file?

I've tried:

  • File, Open: it just shows the text of the .idl text file
  • Project, Add to project: It just (acts like) it adds a .idl text file to the project
  • Component, Install component, Import a Type Library, Add: But it causes a handled crash
  • Component, Install component, Import ActiveX Control, Add: But it causes a handled crash
  • using Embarcadero's GenTLB tool: Fails (which makes sense, as GenTLB it doesn't support IDL, only "RIDL"):

    D:\>gentlb d:\develop\avatar\pdb\source\import\CorSym.idl
    Embarcadero GenTLB Version 12.16581
    Copyright(c) 1995-2010 Embarcadero Technologies, Inc.
    
    Opening  'd:\develop\avatar\pdb\source\import\CorSym.idl'
    ***ERRORS*** - 3 errors encountered:
    Error E0001 CorSym.idl 14: 'library' expected, found 'cpp_quote' instead
    Error E0001 CorSym.idl 49: Type keyword expected, found 'const' instead
    Error E0001 CorSym.idl 63: '<EOF>' expected, found 'module' instead
    

Bonus Reading


Solution

  • You can use a two stage process with Embarcadero tools:

    1. Use gentlb to create a type library from your IDL file.
    2. Use tlibimp to create a Pascal import file from the type library.

    I personally use gentlb to make a type library from an Embarcadero IDE generated .ridl file. I believe that .ridl is an Embarcadero flavour of IDL that is not compatible with standard MS IDL. If you have IDL of the MS flavour then you'd use the MS IDL compiler to generate the type library.