Настройка членов структуры C # через IronPython

1

Мое приложение использует IronPython для запуска скриптов пользователями. Один такой скрипт используется для установки элементов структуры. Моя структура выглядит следующим образом:

[StructLayout(LayoutKind.Sequential)]
public struct Data
{
    int a;
    int b;
}

Я объявил публичный объект уровня класса для этой структуры, например:

public Data data = new data();

Я устанавливаю объект data в качестве переменной области для IronPython:

scope.SetVariable("data", data);

В скрипте python я устанавливаю переменные a и b:

data.a = 5
data.b = 10

Но переменные не изменяются в коде С#. Я заметил, что если я использую нормальное целое или любой другой тип, эти переменные устанавливаются.

Есть ли проблема с использованием структур? Как я могу установить элементы структуры С# из IronPython?

  • 0
    Это тип значения, поэтому вам нужно будет вернуть data и обновить их в C #. Кажется, вы действительно просто хотите class вместо struct .
  • 0
    @leppie: структура используется для установки аналогичных элементов структуры в неуправляемом C ++. Было бы очень утомительно создать класс с теми же членами, что и структура, передать его в IronPython и получить значения, а затем установить членов структуры из класса.
Показать ещё 4 комментария
Теги:
ironpython

1 ответ

0

Используйте объект открытой области видимости для предоставления вспомогательных методов скриптам.
Когда я не могу сделать это в IronPython, это то, что я делаю. IronPython дает мне гибкость полного языка с ifs, fors и whiles, но иногда ответы на интеграцию с миром С# нечеткие, поэтому я просто создаю вспомогательный метод.

Вы даже можете вводить параметры, потому что маршаллинг хорошо работает во всех вызовах функций. void SetResult (int a, int b);

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

Вы должны понимать эту концепцию. Вот хорошая статья о нем...
В чем разница между передачей по ссылке или передачей по значению?

Вы можете использовать эту концепцию самостоятельно.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню