В настоящее время я делаю Java-приложение, которое работает на встроенном devie (POS-терминале).
Это устройство имеет виртуальную машину, специально созданную производителем.
Функции, взаимодействующие с оборудованием, определены в файлах C внутри этого виртуального
источник машины (в профиле AFAIK).
Я не могу вызывать эти функции из своего java-кода, потому что, согласно официальной документации, виртуальная машина не поддерживает ни JNI, ни KNI, она поддерживает только «манипулирование стеком» как метод сопряжения C и Java-кода.
Насколько я мог видеть, аргументы нативных функций передаются с использованием стеков. Выдвижение аргументов перед вызовом функции и вставка их в функции (прототипы имеют пустые аргументы).
Я думаю, что-то подобное должно быть сделано для вызова функций, может быть, что-то связанное со стеком вызовов?
Реальный вопрос в том, как мне соединить C и Java, используя «манипуляции со стеком»?
ОБНОВЛЕНИЕ: Пример вызываемой функции (код C). Печатает сообщение на экране устройства.
void PrintAt(void)
{
Array msg = popStackAsType(Array);
int y = popStack();
int x = popStack();
NativePrint(x,y,msg->bdata);
}