Defining the Marshaling Type

Defining the Marshaling Type

Before you can build a marshaler, you must define the managed and unmanaged interfaces being marshaled. These interfaces commonly perform the same function, but are exposed differently to managed and unmanaged objects.

A managed compiler produces a managed interface from metadata, and the resulting interface looks like any other managed interface. The following code example shows a typical interface:

#using <mscorlib.dll>
interface INew {
    void NewMethod();

You define the unmanaged type in Interface Definition Language (IDL) and compile it with the MIDL compiler. You define the interface within a library statement and assign it an interface ID with the universal unique identifier (UUID) attribute.

library OldLib {
     interface IOld : IUnknown
         HRESULT OldMethod();

The MIDL compiler produces several output files. If the interface is defined in Old.idl, the output file Old_i.c defines a const variable with the interface identifier (IID) of the interface:

const IID IID_IOld = {0x9B2BAADD,0x0705,0x11D3,{0xA0,0xCD,0x00,0xC0,0x4F,0xA3,0x58,0x26}};

The Old.h file is also produced by MIDL. It contains a C++ definition of the interface that can be #included into your C++ source code.

Community Additions

© 2015 Microsoft