Как я могу преобразовать неуправляемый тип значения в управляемый тип (например, указатель на класс)? - PullRequest
0 голосов
/ 07 декабря 2018

В .net у меня есть два класса, например:

class A
{
    public int a;
    public float b;
    public float foo()
    {
        return a + b;
    }
}

class B
{
    public static void Foo(A a)
    {
        Console.WriteLine(a.foo());
    }
}

Код ассемблера функции B.Foo в памяти выглядит следующим образом:

_asm
{
    push ebp;
    mov  ebp, esp;
    push edi;
    sub  esp, 4;
    mov  edi, [ebp + 8];    /// eid is Class A
    cmp  [edi], edi;
    mov  eax, [edi + 8];
    push eax;
    xxxxxx
    xxxxxx
    xxxxxx 
}

Asмы можем видеть, что edi указывает на класс A. В некотором смысле, я получил значение edi, которое является ptr класса A. Теперь я хочу преобразовать edi в класс A. Если это c ++, я могу сделать так:B * b = reinterpret_cast (edi);

...