Может ли модификатор
blockquote>const
в поле структуры указателя типа изменить способ хранения структуры в памяти?Ответ , может быть , зависит от компилятора. Более важным для вашего вопроса является то, как
const
влияет на способ доступа к полю на нативной стороне. Независимо от того, что вы делаете на стороне Java, после инициализации поляinfo
вашей структурыcore_st
вы не сможете его изменить.И именно поэтому вы видите то, что видите здесь: определяя
public info_st.ByReference info;
, вы инициализируете структуруcore_st
указателем наNULL
и получаете адрес памяти0x0
, сохраненный для этого поля. При доступе к этому полю с помощью API вы не можете изменить адрес памяти, он застрял.Вы видите те же результаты, инициализирующие его как
long
со значением по умолчанию (0).Решение зависит от того, как API заполняет это значение. Если на нативной стороне функция
open_core
предполагает, что полеinfo
уже инициализировано с указателем на выделенную структуру, и просто изменяет значения в указанной памяти, все готово. Вам просто нужно инициализировать это поле при первом создании структуры.Вы ничего не говорите мне о том, на что указывает
*info
, поэтому ответ будет разным в зависимости от того, является ли он массивомinfo_st
структур или одной структурой. Если это одна структура, у вас есть:public class core_st extends Structure { public Pointer instance; public info_st.ByReference info = new info_st.ByReference(); }
Это выделит здесь необходимую память для структуры
info_st
и сохранит указатель только для чтения в вашей структуреcore_st
, В зависимости от внутренней работыopen_core()
(и на основании вашего отчета это работает на стороне C), это может сработать!Если нет, то, возможно, размещение рабочего кода C поможет определить, есть ли другое сопоставление JNA, которое могло бы помочь, или вам нужно обойти его с помощью собственной пользовательской функции-оболочки dll.
Я думаю для разработчика C# с фоном.NET, лучший способ ввести функциональное программирование состоит в том, чтобы изучить F#.
Бесстыдный разъем: я - соавтор (хорошо, прославленный редактор действительно :) Функционального программирования Реального мира. Это прямо нацелено на людей такой как самостоятельно. Это преподает принципы функционального программирования, главным образом через F#, и также показывает, как можно применить те же принципы во многих случаях в C#.
Это уже предполагает знание C# но представляет F# с нуля. Это дает Вам достаточно знания F# для запущения Вас, таким образом, можно экспериментировать, но цель состоит в том, чтобы преподавать функциональный образ мыслей вместо того, чтобы войти в каждый укромный уголок и трещину F# как язык. (Другими словами, если бы Вы хотите начать использовать F# в качестве производственного языка, я получил бы другую книгу также.)
Это еще не отсутствует, но можно получить ранний доступ с помощью программы MEAP. Несколько глав уже доступны с большим количеством прибытия скоро.
Выберите функциональный язык. Python имеет много функциональных возможностей. Haskell чисто функционален.
Перейдите к Euler Проекта.
Решите некоторые проблемы.
При рассмотрении Euler статистики Проекта Python и Haskell очень высоко оцениваются.
Править
Функциональное программирование в Python:
Бесплатная онлайн версия Реального мира Haskell является хорошим, дешевым способом начать.
После того как Вы сделали несколько глав, Вы будете иметь возможность решать, является ли FP для Вас, и хотите ли Вы продолжить Haskell или идти дальше на некоторый другой язык. Можно даже продолжить покупать мертвую древовидную версию (как я сделал).
Парадигмы, которые Вы узнаете из этой книги, особенно вводных глав, применяются одинаково хорошо к другим функциональным языкам. (Мне нравится думать мой JavaScript и Groovy, которому извлекают выгоду из моего изучения Haskell).
Проведите некоторое время, смотря на Lisp или Схему, поскольку они - родительский элемент и родительский элемент функционального программирования. Схема PLT является большой средой для проигрывания со Схемой. Вовлеките себя копия Маленького Интригана, поскольку это - хорошее введение для Интригования и поможет Вам войти в курс дела справедливо быстро.
После того как у Вас есть голова вокруг функциональной попытки, делающей некоторые Euler проблемы Проекта функциональным способом.
Я изучил функциональное программирование в колледже, с помощью языка Haskell.
В его домашней странице Вы, скорее всего, находите то, что необходимо начать :)
BTW, требуется много практики для наблюдения решения; алгоритмы, как таковые, не то, что все раньше кодировали на Объектно-ориентированных, логических или процедурных языках.
Я соглашаюсь с Mehrdad Afshari. Если Вы знакомы с C#, запускают функциональное программирование с F#. Синтаксис подобен лямбда-выражениям в C#.