Есть ли что-то эквивалентное 'Address of' или оператору смещения в .net? - PullRequest
0 голосов
/ 10 мая 2010

У нас есть вложенные структуры как таковые, используемые в качестве интерфейса для некоторых драйверов устройств. В некоторых случаях мы должны обновить отдельные элементы. Оператор 'address of' был бы полезен, но я действительно искал функцию или оператор 'offset', но не уверен, как это сделать. Другими словами, как далеко структура N.elementX от начала структуры в байтах?

[StructLayout(LayoutKind.Sequential)]
public struct s1
{
    UInt16 elem1;   
    UInt16 elem2;
    UInt16 elem3;
}

[StructLayout(LayoutKind.Sequential)]
public struct s2
{
    UInt16 elem1;   
    UInt16 elem2;
    UInt16 elem3;
}

[StructLayout(LayoutKind.Sequential)]
public struct driver
{
    public S1 s1;
    public S2 s2;
}

Например, нам нужно отправить драйверу устройства некоторые данные для обновления driver.s1.elem3, указав адрес смещения, блок данных и длину. Мы обновили бы нашу локальную копию, затем вызвали бы api устройства с вышеупомянутыми данными. Не уверен, что я должен делать это с «небезопасными» вызовами методов. Любая помощь?

1 Ответ

0 голосов
/ 11 мая 2010

Подумайте о сотрудничестве с разработчиками вашего устройства и пользовательского интерфейса, чтобы абстрагировать эту реализацию от более подходящих компонентов.

Пользовательский интерфейс, который таким низкоуровневым образом напрямую взаимодействует с драйверами устройств, будет трудно поддерживать, тестировать и создавать (очевидно, что AddressOf уже не является проблемой; -).

Подумайте о реструктуризации как проекта / приложения пользовательского интерфейса (.NET), так и неуправляемой библиотеки, которую вы можете p / invoke или использовать COM, чтобы поговорить с ней, работает ли драйвер устройства ... или посмотрите, управляется ли .NET C ++ может помочь вам в этом.

Извините за то, что не ответил непосредственно на вопрос, но я утверждаю, что изменение архитектуры приложения может быть здесь более важным, чем технический ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...