#c #cobol #tandem
Вопрос:
Я пытаюсь вызвать функцию C из COBOL и ожидаю от нее ответа. Я новичок в этом взаимодействии.
Код COBOL:
ENTER C "ADD" USING A,B.
Код C:
int ADD(int a,int b)
{
return a b;
}
Я хочу получить значение суммы из функции C для дальнейшей обработки в COBOL.
Комментарии:
1. … и вот в чем вопрос? Примечание: для
CALL
этого вы передадите данныеBY VALUE
со стороны COBOL. Если вы хотитеBY REFERENCE
, вам придется использовать указатели —int *a
— и тогда вы также увидите изменения в тех, которые находятся на стороне COBOL.2. Я получаю ошибку при вызове по ссылке, ошибки 44 и 45 при компиляции COBOL Было бы здорово, если бы у вас был какой-нибудь пример или ссылка, которая возвращает значение cobol из c
3. любые предложения @SimonSobisch
4. Вы должны получить ошибку во время вызова, так как часть C использует
int
неint *
. Если вы измените этот и звонокBY REFERENCE
с переменными определяется как «цифровой элемент данных описывается как комп-5 с фото С9(9) и родной-4» (по Коболев инструкция по от HP), то c может настраивать переменные и COBOL бы увидеть его (вы можете или не хотите этого). Кроме этого, вы могли бы попробовать, чтобы это сделал КОБОЛCALL "ADD" USING BY VALUE
, а затем проверитьRETURN-CODE
реестр. Если и то, и другое не работает, я бы взглянул наENTER
заявление (но это полное расширение HP).5. Я не знаю тандема, но когда я вызываю программу на языке Си, я должен использовать
CALL
иUSING
.
Ответ №1:
В КОБОЛ
EXTENDED-STORAGE SECTION.
01 MYVAR EXTERNAL.
05 DATA-01 PIC X(20).
В С
/*Add necessary includes */
extern char MYVAR[21];
void change_Cobol_Variable()
{
/*you can use MYVAR as normal C-variable*/
sprintf(MYVAR, "%s","Something");
}
Если это целое число, объявите соответствующие переменные в соответствии с вашими потребностями 🙂
Комментарии:
1. Всегда ли HP добавляет один (малозначимый) байт в определения COBOL, только для
EXTERNAL
переменных, или в этом примере есть ошибка, которая может привести к повреждению памяти, когда длина текстаsprintf
» d » составляет 20 символов, а конечное малозначимое значение будет записано в позицию 21? Как этот ответ связан с исходным вопросом «как получить сумму C для обработки в COBOL» (поскольку этот ответ касается буквенно-цифровой группы размером 20, а не целого числа)?2. Приведенный выше ответ является примером! Это просто код psuedo!
3. Не могли бы вы, пожалуйста, отредактировать ответ — в идеале с реальным кодом и целыми числами, если это невозможно, то с явным примечанием о том, какие части являются псевдокодом и нуждаются в корректировке?
Ответ №2:
В Кобол:
EXTENDED-STORAGE SECTION.
01 C EXTERNAL.
05 DATA-01 PIC 9(1).
В С:
/*Add necessary includes */
extern int C;
void ADD(int A,int B)
{
/*you can use C as normal C-variable*/
C=A B;
}