Я занят проектом 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 ++ при компиляции, но это тоже не работает.
Любая помощь в этом будет оценена.
Во-первых, какой компилятор C ++ вы используете?
Родная иль одна? Тогда это должно быть довольно легко. Уверен, что вам просто нужно:
extern "RPG"
в объявлении функции.
Или AIX включен в PASE? Тогда взгляните на Вызов процедур ILE
Стоит отметить, что RPGLE нечувствителен к регистру и по умолчанию использует прописные имена. Пока C / C ++ чувствителен к регистру. Ваша C ++ программа должна вызывать RPG_DOSOMETHING
или вам нужно применить имя с учетом регистра к процедуре RPG, используя EXTPROC('rpg_DoSomething')
Других решений пока нет …