Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ha a .NET-futtatókörnyezet alapértelmezett paraméter-rendezési viselkedése nem azt teszi, amit szeretne, az System.Runtime.InteropServices.MarshalAsAttribute attribútum használatával testre szabhatja a paraméterek rendezési módját. Ezek a testreszabási funkciók nem érvényesek, ha a futtatási idő alatti adatátalakítás le van tiltva.
Megjegyzés:
A P/Invokes és a COM forrás által létrehozott interopja csak a paraméterek egy kis részhalmazát MarshalAsAttribute tartja tiszteletben. Javasoljuk, hogy inkább a forrás által létrehozott interophoz használja MarshalUsingAttribute . További információ: Egyéni csatornázás a forrásgeneráláshoz.
Sztringparaméterek testreszabása
A .NET számos formátumot kínál a sztringek átvitelére. Ezek a metódusok különböző szakaszokra vannak felosztva a C-stílusú sztringeken és a Windows-központú sztringformátumokon.
C stílusú karakterláncok
Mindegyik formátum nullával lezárt sztringet ad át a natív kódnak. Ezek különböznek a natív sztring kódolásától.
System.Runtime.InteropServices.UnmanagedType érték |
Encoding |
|---|---|
| LPStr | ANSI |
| LPUTF8Str | UTF-8 |
| LPWStr | UTF-16 |
| LPTStr | UTF-16 |
A UnmanagedType.VBByRefStr formátum kissé eltérő. Ehhez hasonlóan LPWStr, a karakterláncot egy natív, UTF-16-ban kódolt C-stílusú karakterláncra alakítja. A felügyelt aláírás azonban hivatkozással adja át a sztringet, és az egyező natív aláírás érték szerint veszi át a sztringet. Ez a megkülönböztetés lehetővé teszi, hogy olyan natív API-t használjon, amely egy sztringet értékként visz be és helyben módosít anélkül, hogy StringBuilder-t használna. Nem javasoljuk, hogy manuálisan használja ezt a formátumot, mivel ez zavart okozhat a natív és a felügyelt aláírások nem egyezősége miatt.
Windows-központú sztringformátumok
A COM- vagy OLE-felületek használatakor valószínűleg azt fogja tapasztalni, hogy a natív függvények argumentumként BSTR sztringeket használnak. A UnmanagedType.BStr nem felügyelt típus használatával egy sztringet BSTR típusként marsholhat.
Ha WinRT API-kat használ, a UnmanagedType.HString formátum segítségével sztringeket HSTRING formátumba ágyazhat.
Tömbparaméterek testreszabása
A .NET több módszert is kínál a tömbparaméterek beállítására. Ha C stílusú tömböt használó API-t hív meg, használja a UnmanagedType.LPArray nem felügyelt típust. Ha a tömbben lévő értékeken testreszabott marshallingot kell alkalmazni, használhatja az ArraySubType[MarshalAs] attribútum mezőjét.
Ha COM API-kat használ, valószínűleg a tömbparamétereit SAFEARRAY*-ként kell kezelnie. Ehhez használhatja a UnmanagedType.SafeArray nem felügyelt típust. Az elemek alapértelmezett típusa a SAFEARRAYmezők testreszabását objecttartalmazó táblázatban látható. A MarshalAsAttribute.SafeArraySubType és MarshalAsAttribute.SafeArrayUserDefinedSubType mezőkkel testre szabhatja az elem pontos típusát SAFEARRAY.
Logikai vagy decimális paraméterek testreszabása
A logikai vagy decimális paraméterek rendezésével kapcsolatos információkért lásd a struktúra-rendezés testreszabását ismertető témakört.
Objektumparaméterek testreszabása (csak Windows rendszeren)
Windows rendszeren a .NET-futtatókörnyezet számos különböző módot kínál az objektumparaméterek natív kódba való beállítására.
Adatcsomagolás specifikus COM-interfészként
Ha az API egy COM-objektumra mutató pointert használ, a következő UnmanagedType formátumok bármelyikét használhatja egy object-típusú paraméteren, hogy a .NET úgy adja át, mint ezek az interfészek.
IUnknownIDispatchIInspectable
Ezenkívül, ha a típus meg van jelölve [ComVisible(true)], vagy a object típus kódolására kerül sor, a UnmanagedType.Interface formátum használatával az objektumot COM-hívó burkolóként jelenítheti meg a típus COM-nézetéhez.
Sorba rendezése VARIANT
Ha a natív API Win32 VARIANT-t használ, akkor a UnmanagedType.Struct formátumot alkalmazhatja a object paraméteren, hogy az objektumokat VARIANT-ként kezelje. Tekintse meg a mezők testreszabásával object kapcsolatos dokumentációt a .NET-típusok és VARIANT -típusok közötti leképezéshez.
Egyéni szerializálók
Ha egy natív COM-felületet más felügyelt típusba szeretne kivetíteni, használhatja a UnmanagedType.CustomMarshaler formátumot és a ICustomMarshaler megvalósítást saját egyéni marshalling kód megadásához.