cobol用长参数调用C函数

时间:2014-07-11 21:00:08

标签: c function cobol

我有一个用C

定义的函数
bool moveTable(char * ,  long); 

是从cobol调用的,当它从cobol调用时,我可以看到它将一个正确的long值传递给moveTable函数,但是当控件传递给C并且我在moveTable中执行printf时,由于某种原因,我得到垃圾负值,如-178634436。我认为这不是一个存储问题,因为在cobol上传递给long的数字是5264011,可以在很长时间内保存。

有什么建议吗?

编辑:这是在cobol中定义字段的方式,它被传递给moveTable函数long参数。

   10  ATPRM-TRT-ACCT-ID           PIC S9(08) COMP-5. 

2 个答案:

答案 0 :(得分:0)

ISN'吨

 10  ATPRM-TRT-ACCT-ID           PIC S9(08) COMP-5. 

4字节整数,而 long 可以是4或8字节整数???取决于实施。

不应该

 10  ATPRM-TRT-ACCT-ID           PIC S9(17) COMP-5. 

这可能不是答案,但这是一个问题。 C也期望任何单词对齐???

答案 1 :(得分:-1)

尝试使用int。如果这不起作用,那么删除另一个char *并使用int或long传递值,看看它是否有所不同。在处理交叉系统或字符串然后将数字转换为long时,我会坚持使用整数。这与我的研究无关。我只记得很长时间而不是长期。在AIX中,int和long很可能是相同的大小。

因此,如果没有任何作用,请尝试将数字作为字符串(char *或char数组)传递,无论哪个都有效....

请参阅此http://publib.boulder.ibm.com/infocenter/comphelp/v7v91/index.jsp?topic=%2Fcom.ibm.aix.cbl.doc%2Fcpari09.htm

此外,如果您可以更改类型S9(9)..请参阅此

http://publib.boulder.ibm.com/infocenter/comphelp/v7v91/index.jsp?topic=%2Fcom.ibm.aix.cbl.doc%2Ftpsubw20.htm