rpgle — вызов процедуры RPG из переполнения стека

Я занят проектом C ++ в IBM i и пытаюсь вызвать процедуру RPG, которая находится в служебной программе, но я не уверен, как это сделать.

Я нахожу только примеры в Интернете и документация это показывает, как вызвать объект программы RPG (* PGM), определив его следующим образом:

extern "OS"{
void RPGPROGRAM(void);
}

int main()
{
RPGPROGRAM();
return 0;
}

В документации говорится, что они вызывают RPG-процедуру, но если вы посмотрите на реальный источник, то это просто объект программы RPG (* PGM), который они вызывают из C ++, используя #pragma map,

Допустим, у меня есть следующая служебная программа RPG (назовем ее RPGSP) с процедурой rpg_doSomething определены в нем:

ctl-opt nomain;

dcl-proc rpg_doSomething export;
dcl-pi *n int(10);
dcl-parm p_test char(20);
end-pi;

p_test = "It Works!!";

return 1;

end-proc;

Как мне объявить и вызвать вышеуказанную процедуру в моей программе на C ++?

Я пытался объявить это в рамках extern блок, но в конечном итоге ищет rpg_doSomething объект во время выполнения и не может его найти. Я также пытался привязать служебную программу к программе C ++ при компиляции, но это тоже не работает.

Любая помощь в этом будет оценена.

0

Решение

Во-первых, какой компилятор C ++ вы используете?

Родная иль одна? Тогда это должно быть довольно легко. Уверен, что вам просто нужно:
extern "RPG" в объявлении функции.

Или AIX включен в PASE? Тогда взгляните на Вызов процедур ILE

Стоит отметить, что RPGLE нечувствителен к регистру и по умолчанию использует прописные имена. Пока C / C ++ чувствителен к регистру. Ваша C ++ программа должна вызывать RPG_DOSOMETHING или вам нужно применить имя с учетом регистра к процедуре RPG, используя EXTPROC('rpg_DoSomething')

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]