Sdílet prostřednictvím


Směrové atributy (parametr)

Směrové atributy popisují, jestli se data přenášejí z klienta na server, ze serveru do klienta nebo z obou. Všechny parametry v prototypu funkce musí být přidružené ke směrovým atributům. Tři možné kombinace směrových atributů jsou: 1) [v], 2) [ven] a 3) [v, ven]. Tyto popisují způsob předávání parametrů mezi voláním a voláním procedur. Při kompilaci ve výchozím (rozšířeném režimu Microsoft) a vynecháte směrový atribut parametru, kompilátor MIDL předpokládá výchozí hodnotu [v].

Parametr [out] musí být ukazatel. Ve skutečnosti atribut [out] není smysluplný, pokud se použije na parametry, které nefungují jako ukazatele, protože parametry funkce jazyka C jsou předány hodnotou. V jazyce C obdrží volaná funkce soukromou kopii hodnoty parametru; nemůže změnit hodnotu volající funkce pro tento parametr. Pokud však parametr funguje jako ukazatel, lze jej použít pro přístup k paměti a jeho úpravě. Atribut [out] označuje, že funkce serveru by měla vrátit hodnotu volající funkci klienta a že paměť přidružená k ukazateli by měla být vrácena v souladu s atributy přiřazenými k ukazateli.

Následující rozhraní ukazuje tři možné kombinace směrových atributů, které lze použít na parametr. Funkce InOutProc je definována v souboru IDL takto:

void InOutProc ([in]       short     s1,
                [in, out]  short *  ps2,
                [out]      float *  pf3);

První parametr, s1, je [v] pouze. Jeho hodnota je přenášena do vzdáleného počítače, ale není vrácena do volající procedury. I když serverová aplikace může změnit jeho hodnotu pro s1, hodnota s1 na klientovi je stejná před a po volání.

Druhý parametr, ps2, je definován v prototypu funkce jako ukazatel s atributy [v] a [out]. Atribut [v] označuje, že hodnota parametru je předána z klienta na server. Atribut [out] označuje, že hodnota, na kterou odkazuje ps2 je vrácena klientovi.

Třetí parametr je pouze [out] . Pro parametr na serveru je přidělen prostor, ale hodnota není definována při zadání. Jak je uvedeno výše, všechny parametry [out] musí být ukazatele.

Vzdálený postup změní hodnotu všech tří parametrů, ale pro klienta jsou k dispozici pouze nové hodnoty [ven] a [v].

#define MAX 257

void InOutProc(short    s1,
               short * ps2,
               float * pf3)
{
    *pf3 = (float) s1 / (float) *ps2;
    *ps2 = (short) MAX - s1;
    s1++;  // in only; not changed on the client side
    return;
}

Při návratu z volání InOutProcse upraví druhý a třetí parametr. První parametr, který je [pouze v] je beze změny.

v parametrech

parametry

parametry in-out