Condividi tramite


Definizione del tipo di marshalling

Prima di compilare un gestore di marshalling è necessario stabilire su quali interfacce gestita e non gestita dovrà agire. Tali interfacce svolgono solitamente la stessa funzione, ma sono esposte in modo diverso, l'una a oggetti gestiti, l'altra a oggetti non gestiti.

Un compilatore gestito utilizza metadati per produrre un'interfaccia gestita. L'interfaccia risultante appare come qualsiasi altra interfaccia gestita. Nell'esempio di codice che segue viene illustrata un'interfaccia tipica.

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

Il tipo non gestito viene definito con il linguaggio di definizione dell'interfaccia (IDL, Interface Definition Language) e compilato con il compilatore MIDL. All'interfaccia, definita all'interno di un'istruzione di libreria, viene assegnato un ID di interfaccia con l'attributo UUID (Universal Unique Identifier).

In Old.idl

[uuid(9B2BAADA-0705-11D3-A0CD-00C04FA35826)]
library OldLib {
     [uuid(9B2BAADD-0705-11D3-A0CD-00C04FA35826)]
     interface IOld : IUnknown
         HRESULT OldMethod();
}

Il compilatore MIDL produce diversi file di output. Se l'interfaccia è definita in Old.idl, nel file di output Old_i.c verrà definita una variabile const con l'IID (Interface Identifier) dell'interfaccia:

In Old_i.c

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

Anche il file Old.h viene prodotto da MIDL. Esso contiene una definizione C++ dell'interfaccia che può essere inclusa (con #include) nel proprio codice sorgente C++.

Vedere anche

Concetti

Marshalling personalizzato

Implementazione dell'interfaccia ICustomMarshaler

Utilizzo di un gestore di marshalling sostitutivo