c # конвертировать структуру в int - PullRequest
0 голосов
/ 03 августа 2011

Рассмотрим следующую структуру:

[StructLayout(LayoutKind.Sequential)]
struct CONTEXT
{
public UINT ContextFlags;
unsafe fixed byte unused[160];
public uint Ebx;
public uint Edx;
public uint Ecx;
public uint Eax;
unsafe fixed byte unused2[24];
}

И следующий код:

Context ctx = new Context{ ContextFlags = 0x10007 };

Теперь я хотел бы преобразовать этот представитель структуры (ctx) в тип int.

int x = (int)ctx;

Приведенный выше метод не сработает. Может ли кто-нибудь придумать правильный путь для этого преобразования?

Спасибо,

Evan

1 Ответ

6 голосов
/ 03 августа 2011

Я подозреваю, что вы планируете вызвать метод Windows API, который использует эту структуру . Возможно, даже этот метод . В этом случае маршаллер .NET справится с этим за вас.

[DllImport("kernel32.dll")]
public static extern bool GetThreadContext(IntPtr thread, ref CONTEXT context);

Обратите внимание, что вы передаете структуру, используя ключевое слово ref. Маршаллер позаботится о создании неуправляемого указателя на структуру и передаче его вызываемому методу. Он также будет обрабатывать возвращение указателя как структуру, если метод изменяет данные структуры.

...