Преобразование из пустоты* для возражения в C#

В проекте C# я должен передать параметры объекта путем помещения ссылок в структуру. т.е. Мне передали структуру диспетчеру

struct SOMESTRUCT
{
    public int lpObject;
}

Где lpObject содержит указатель на пользовательский объект как

class SomeClass
{
    private string foo;
}

И структура SOMESTRUCT передается от метода до метода для окончательного достижения моего кода. Я не могу изменить поток выполнения, ни странную систему SOMSTRUCT, таким образом, я предположил, что единственное решение состояло в том, чтобы бросить мой объект к указателю как это:

var myObject = new SomeClass();
GCHandle GC = GCHandle.Alloc(myObject, GCHandleType.Pinned);
int myRef = GC.AddrOfPinnedObject().ToInt32();
GC.Free();

SOMESTRUCT struct;
struct.lpObject = myRef;
someMethod(struct);

Однако я не могу выяснить, как получить myObject участников от lpObject полей. Что-то вроде этого:

SomeClass myObject = CastPointerToObject(struct.myRef) as SomeClass;

Существует ли способ сделать это, или действительно ли это невозможно? Как я могу сказать сборщику "мусора" обрабатывать объект? Я должен создать новый Собравший "мусор" объект и копировать поле данных полем?

TYIA,

5
задан slaphappy 29 June 2010 в 14:43
поделиться

1 ответ

Вы имеете в виду, что хотите преобразовать возвращенный указатель обратно в структуру?

Аналогично:

lvHitTestInfo = (LVHITTESTINFO)Marshal.PtrToStructure(lP, typeof(LVHITTESTINFO));

Где lvHitTestInfo - это структура, а lp - указатель.

Или я неправильно понял ваш вопрос. Возможно, вы сможете объяснить больше (более полный пример кода).

2
ответ дан 14 December 2019 в 13:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: