Отправка данных из C в COBOL на HP Tandem

#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;
}