В проекте 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,
Вы имеете в виду, что хотите преобразовать возвращенный указатель обратно в структуру?
Аналогично:
lvHitTestInfo = (LVHITTESTINFO)Marshal.PtrToStructure(lP, typeof(LVHITTESTINFO));
Где lvHitTestInfo - это структура, а lp - указатель.
Или я неправильно понял ваш вопрос. Возможно, вы сможете объяснить больше (более полный пример кода).