Datarepresentation
Datormiljöer kan skilja sig avsevärt, liksom nätverksarkitekturer. För att hantera dessa skillnader kan du med MIDL ändra hur du representerar data. Ibland kan du förenkla utvecklingen genom att konvertera data till ett format som programmet enklare kan hantera. Du kan ändra programmets dataformat så att det kan överföras mer effektivt via nätverket.
Attributen [transmit_as] och [represent_as] instruerar kompilatorn att associera en överförbar typ som stub skickar mellan klient och server, med en användartyp som klient- och serverprogrammen använder. Du måste ange de rutiner som utför konverteringen mellan användartypen och den överförbara typen och rutinerna för att frigöra det minne som användes för att lagra konverterade data. Med hjälp av attributet [transmit_as] IDL eller attributet [represent_as] ACF instrueras stub att anropa dessa konverteringsrutiner före och efter överföring. Med attributet [transmit_as] kan du konvertera en datatyp till en annan datatyp för överföring över nätverket. Med attributet [represent_as] kan du styra hur data från nätverket visas för programmet.
Attributen [wire_marshal] och [user_marshal] är Microsoft-tillägg till OSF-DCE IDL. Deras syntax och funktioner liknar de DCE-angivna [transmit_as] och [represent_as] attribut. Skillnaden är att du, i stället för att konvertera data från en typ till en annan, konverterar data direkt. För att göra detta måste du ange de externa rutinerna för att ändra storlek på databufferten på klient- och serversidan, ordna om och ta bort data på klient- och serversidan och frigöra data på serversidan. MIDL-kompilatorn genererar formatkoder som instruerar NDR-motorn att anropa dessa externa rutiner när det behövs.
Attributen [wire_marshal] och [user_marshal] gör det möjligt att konvertera datatyper som annars inte kunde överföras över processgränser. Eftersom det finns mindre omkostnader i samband med typkonverteringen [wire_marshal] och [user_marshal] ge bättre prestanda vid körning jämfört med [transmit_as] och [represent_as]. Attributen [wire_marshal] och [user_marshal] är ömsesidigt uteslutande med avseende på varandra och med avseende på [transmit_as] och [represent_as] attribut för en viss typ.
Observera att implementeringen av [wire_marshal] och [user_marshal] attribut måste följa de marshallingregler som bestäms av OSF-DCE specifikation. Därför rekommenderas inte användning av dessa attribut om du inte är bekant med trådprotokollet. Mer information om NDR-syntaxöverföring finns i www.opengroup.org.
Det här avsnittet innehåller en kort översikt över dessa för MIDL-attribut i följande avsnitt: