Невозможно получить адрес, получить размер или объявить указатель на управляемый тип («имя типа») - PullRequest
3 голосов
/ 01 апреля 2010

эта ошибка перестает компилироваться, если в моей структуре есть одна или несколько System.String
Есть ли другой способ хранения строк?

Я пробовал такие вещи:

private long _B_ID;
private byte[] _C_Name;
private byte[] _C_Address;
private byte[] _C_Telephone;

но это не похоже на работу.

Ответы [ 3 ]

5 голосов
/ 14 октября 2010

Вы можете получить адрес структуры, только если она является blittable, то есть она не содержит ссылок.См. Blittable и Non-Blittable Types (MSDN)

1 голос
/ 14 октября 2010

Вы не можете объявить указатель на нефиксированные типы, даже если вы используете «небезопасно». Чтобы устранить эту ошибку, Вы ДОЛЖНЫ указать размер массивов вместе с фиксированным ключевым словом.

Например, _C_Name содержит 25 байтов. Так объявите это как:

private fixed byte _C_Name[25];

Строки имеют фиксированный тип, поэтому вы не получили ошибку при объявлении их как String. Надеюсь, это работает для вас!

Привет!

0 голосов
/ 01 апреля 2010

Попробуйте атрибут MarshalAs:

struct Foo
{
    [MarshalAs(UnmanagedType.LPStr]
    string s;
}
...