Dlaczego muszę wykonać ldarg.0 przed wywołaniem pola w MSIL?
Chcę wywołać funkcję, jako parametry astring
i anInt32
. Thestring
jest po prostu dosłownyInt32
powinien byćfield
. Pomyślałem, że powinno to być coś w stylu:
.method public hidebysig instance string TestVoid() cil managed
{
.maxstack 1
.locals init (
[0] string CS i an0000)
L_0000: nop
L_0001: ldstr "myString"
L_0006: ldfld int32 FirstNamespace.FirstClass::ByteField
L_000b: call string [Class1]Class1.TestClass::Functie<int32>(string, int32)
L_0010: ret
}
Ale to powoduje błąd, że nie jest to prawidłowy kod. Podczas dodawania
ldarg.0
przedldfld
działa dobrze. Dlaczego tak się dzieje i czy to wpędza mnie w kłopoty, gdy mam więcej pól?