Sdílet prostřednictvím


Problémy s verzí u typů hodnot vnořených v nativních typech (C++/CLI)

Zvažte možnost použití podepsané (silný název) komponenty sestavení k vytvoření klientského sestavení.Komponenta obsahuje typ hodnoty, který je použit v klientovi jako typ pro člena nativní unie, třídy nebo pole.Pokud budoucí verze komponenty změní velikost nebo rozložení typu hodnoty, pak musí být klient znovu zkompilován.

Vytvořte klíčový soubor pomocí sn.exe (sn -k mykey.snk).

Příklad

Následující ukázka je komponenta:

// nested_value_types.cpp
// compile with: /clr /LD
using namespace System::Reflection;
[assembly:AssemblyVersion("1.0.0.*"), 
assembly:AssemblyKeyFile("mykey.snk")];

public value struct S {
   int i;
   void Test() {
      System::Console::WriteLine("S.i = {0}", i);
   }
};

Tato ukázka je klient:

// nested_value_types_2.cpp
// compile with: /clr
#using <nested_value_types.dll>

struct S2 {
   S MyS1, MyS2;
};

int main() {
   S2 MyS2a, MyS2b;
   MyS2a.MyS1.i = 5;
   MyS2a.MyS2.i = 6;
   MyS2b.MyS1.i = 10;
   MyS2b.MyS2.i = 11;

   MyS2a.MyS1.Test();
   MyS2a.MyS2.Test();
   MyS2b.MyS1.Test();
   MyS2b.MyS2.Test();
}

Výsledek

S.i = 5
S.i = 6
S.i = 10
S.i = 11

Komentáře

Pokud přidáte jiný člen do struct S v nested_value_types.cpp (například double d;) a znovu zkompilujete komponentu bez znovu-zkompilování klienta, výsledkem je neošetřená výjimka (typu FileLoadException).

Viz také

Další zdroje

Spravované typy (C++/CLI)