Question

Si vous êtes prêt à manipuler les supports de module IL Initialiseur

http://blogs.msdn.com/ b / junfeng / archive / 2005/11/19 / 494914.aspx

http://tech.einaregilsson.com/2009 / 12/16 / module-initializers-en-csharp /

initialiseurs sont-Module pris en charge dans Silverlight et Windows Phone 7?

Était-ce utile?

La solution

Seul C ++ / CLI prend en charge un initialiseur de module. Et c'est qu'indirectement, il les utilise pour obtenir le CRT a commencé et pour obtenir des variables non gérés et objets initialisé. Vous devez écrire dans IL. J'ai essayé, il fonctionnait très bien sur Silverlight 4:

.assembly extern mscorlib
{
  .publickeytoken = (7C EC 85 D7 BE A7 79 8E )
  .ver 2:0:5:0
}

.assembly test
{
  .custom instance void [mscorlib]System.Runtime.CompilerServices.RuntimeCompatibilityAttribute::.ctor() = ( 01 00 01 00 54 02 16 57 72 61 70 4E 6F 6E 45 78
                                                                                                               63 65 70 74 69 6F 6E 54 68 72 6F 77 73 01 )
  .custom instance void [mscorlib]System.Runtime.Versioning.TargetFrameworkAttribute::.ctor(string) = ( 01 00 18 53 69 6C 76 65 72 6C 69 67 68 74 2C 56
                                                                                                        65 72 73 69 6F 6E 3D 76 34 2E 30 01 00 54 0E 14
                                                                                                        46 72 61 6D 65 77 6F 72 6B 44 69 73 70 6C 61 79
                                                                                                        4E 61 6D 65 0D 53 69 6C 76 65 72 6C 69 67 68 74
                                                                                                        20 34 )                                    
  .hash algorithm 0x00008004
  .ver 1:0:0:0
}

.method assembly specialname rtspecialname static void .cctor() cil managed
{
  ldc.i4.s   42
  stsfld     int32 Example.Class1::test
  ret
}

.class public auto ansi beforefieldinit Example.Class1
       extends [mscorlib]System.Object
{
  .field public static int32 test
  .method public hidebysig specialname rtspecialname 
          instance void  .ctor() cil managed
  {
    .maxstack 8
    ldarg.0
    call       instance void [mscorlib]System.Object::.ctor()
    ret
  }
}

C'est un exemple stupide, le module initialiseur ensembles un champ statique de Class1. Je ensuite créé une instance de classe 1 dans un échantillon de l'application Silverlight et vérifié la valeur avec le débogueur.

Ce même code fait pas travail dans l'émulateur Windows Phone. J'aurais modifié le TargetFrameworkAttribute, n'a pas réellement essayer cela. Je doute que ce soit la source du problème.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top