IBM大型机论坛索引
 
登录
 
IBM大型机论坛索引 大型机:搜索 IBM Mainframe论坛:常见问题解答 寄存器
 

Cobol中的指针概念


IBM大型机论坛 -> COBOL程式设计
发表新话题   回复主题
查看上一个主题 :: 查看下一个主题  
作者 信息
塞迪雷斯瓦拉普

新的用户


已加入:2008年6月18日
帖子:28
地点:印度

发布发表:2008年9月24日,星期三5:56 pm
引用回复

你好
这是Cobol编程中新的指针概念,
在我的项目中,尝试从C程序向Cobol发送一个Character指针。

链接部分。
01 MYPOINTER的用法就是POINTER。
01 MYCHAR-POINTER。
05 MYCHARS图片X(20)。

使用MYPOINTER,MYCHAR-POINTER进行程序划分。
将MYCHAR-POINTER的地址设置为MYPOINTER

也尝试过

将MYPOINTER的地址设置为MYCHAR-POINTER ..但是没有运气

按照上面的代码,Cobol模块将在“链接”部分获取“指针”,并尝试将其分配给组Item。而且我也尝试显示指针,但是我只看到一些随机数。

尝试设置地址时,SOC4异常终止。

您能否在cobol中对此指针处理进行一些说明。
回到顶部
查看用户资料 发送私信
CICS家伙

高级会员


已加入:2007年7月18日
帖子:2146
位置:在我的咖啡桌上

发布发表:2008年9月24日,星期三6:05 pm
引用回复

引用:
使用MYPOINTER,MYCHAR-POINTER进行程序划分。
我不明白,如果您同时收到这两个字段,为什么要尝试将一个设置为另一个?
回到顶部
查看用户资料 发送私信
塞迪雷斯瓦拉普

新的用户


已加入:2008年6月18日
帖子:28
地点:印度

发布发表:2008年9月24日,星期三,下午6:18
引用回复

对困惑感到抱歉。

其实在做:

使用MYPOINTER进行程序划分

并且MYCHAR-POINTER组项目在Workstorage部门中声明。
正在尝试做的是:

1.打印指针内容-它不起作用(向我显示一些随机数)

2.尝试将MYPOINTER(通常COBOL获得类似于VOID指针的指针)分配给Chars字符串变量。

是否有可能分配一个指针(将来我将要从C向COBOL发送结构指针,并且必须将其分配给组项目以从中获取字段..)到类似类型的数据项目?

谢谢。
回到顶部
查看用户资料 发送私信
钦南

新的用户


已加入:2006年10月18日
帖子:73

发布发表:2008年9月24日,星期三6:34 pm
引用回复

您可以尝试按以下方式进行更改吗?

码:


链接部分。
01 MYCHAR-POINTER。
05 MYCHARS PIC X(20).
01 MYPOINTER的用法就是POINTER。

使用MYPOINTER进行程序划分。

将MYCHAR-POINTER的地址设置为MYPOINTER


回到顶部
查看用户资料 发送私信
塞迪雷斯瓦拉普

新的用户


已加入:2008年6月18日
帖子:28
地点:印度

发布发表:2008年9月24日,星期三,8:04 pm
引用回复

感谢您的回复。

但是在SET语句中它与SOC4一起出现。

链接部分。
01 MYCHAR-POINTER。
05 MYCHARS图片X(20)。
01 MYPOINTER的用法就是POINTER。

使用MYPOINTER进行程序划分。
显示“用指针测试钴”。
将MYCHAR-POINTER的地址设置为MYPOINTER
显示“ MYCHARS =” MYCHAR-POINTER。
回去。


此cobol模块是从C模块调用的

#包括<stdio.h>
#包括<stdlib.h>
#包括<string.h>
#pragma关联(TESTCOB,COBOL)
TESTCOB(字符*)无效;
无效main()
{
char * pName =“ BALAJI”;
printf(“使用cobol测试指针\ n”);
printf(“名称:%s \ n”,pName);
TESTCOB(pName);
printf(“ Exit \ n”);
}


在这一点上,所有我想做的就是将我在COBOL中获得的指针设置为另一个变量。.由于将来bcoz我将从C程序发送STRUCTURE POINTER,并且必须将该COBOL中的指针映射到GROUP ITEM。

不确定是否可行,但这是我在此设计上使用COBOL进行处理的想法。请帮忙,因为这对我来说听起来很新,但充满挑战..

谢谢。
回到顶部
查看用户资料 发送私信
钦南

新的用户


已加入:2006年10月18日
帖子:73

发布发表:2008年9月24日,星期三9:12 pm
引用回复

似乎未设置MYPOINTER。

您确定从C到COBOL的调用的SYNTAX / OPTIONs吗?

因为回到当我们尝试在PL / I和COBOL之间做类似的事情时,我们曾经提到一些特定的选项,这表明它是不同语言之间的调用。
回到顶部
查看用户资料 发送私信
罗伯特·桑普

全球主持人


已加入:2008年6月6日
帖子:8569
地点:美国爱荷华州迪比克

发布发表:2008年9月24日,星期三,9:22 pm
引用回复

您的程序违反了COBOL标准:
码:
链接部分。
01 MYCHAR-POINTER。
05 MYCHARS PIC X(20).
01 MYPOINTER的用法就是POINTER。

使用MYPOINTER进行程序划分。
而手册说
引用:
4.2.2编码链接部分


在调用程序的标识符列表中编码与调用程序的标识符列表中的数据名称数量相同的数据名称。通过位置将它们同步,因为编译器会将调用程序的第一个标识符传递给被调用程序的第一个标识符,依此类推。

如果被调用程序的标识符列表中的数据名称数量大于调用程序的标识符列表中的数据名称数量,则会引入错误。编译器不会尝试匹配参数和参数。


使用变量的PROCEDURE DIVISION必须与“链接部分”中的顺序相同。做其他任何事情,S0C4肯定是可能的。
回到顶部
查看用户资料 发送私信
CICS家伙

高级会员


已加入:2007年7月18日
帖子:2146
位置:在我的咖啡桌上

发布发表:2008年9月24日,星期三9:52 pm
引用回复

罗伯特·萨普(Robert Sample)写道:
您的程序违反了COBOL标准...
.
.
.
使用变量的PROCEDURE DIVISION必须与“链接部分”中的顺序相同。做其他任何事情,S0C4肯定是可能的。
这是错误的,必须使过程和调用的使用顺序保持同步。
传递的参数列表由每个参数的单独地址组成。
回到顶部
查看用户资料 发送私信
罗伯特·桑普

全球主持人


已加入:2008年6月6日
帖子:8569
地点:美国爱荷华州迪比克

发布发表:2008年9月25日,星期四,上午12:02
引用回复

实际上,在这种情况下,CALL具有什么都没有关系。 Sriram的程序在“链接”部分中有2 01级。程序部门正在使用第二个01级别,而不是第一个。尝试同时引用两个LINKAGE SECTION 01字段将导致S0C4,因为COBOL没有为两个字段设置可寻址性。

Sriram:为什么您认为在COBOL中需要一个指针变量?如果您的C程序对COBOL例程进行了CALL调用,并且CALL包含一个结构,则只需在COBOL程序中定义LINKAGE SECTION即可将结构中的每个项目都包括在内,然后在您的COBOL程序中引用这些项目。程序划分使用<linkage section 01>建立变量的可寻址性。我已经对此进行了测试,并成功地通过了两种方式传递数据。
回到顶部
查看用户资料 发送私信
CICS家伙

高级会员


已加入:2007年7月18日
帖子:2146
位置:在我的咖啡桌上

发布发表:2008年9月25日,星期四,上午12:24
引用回复

罗伯特·萨普(Robert Sample)写道:
尝试同时引用两个LINKAGE SECTION 01字段将导致S0C4,因为COBOL没有为两个字段设置可寻址性。
这就是SET应该做的...
圣礼拜堂:
SET上的S0C4表示MYPOINTER的传递地址是(可能)低值……
在SET之前,对SET SET OF ANPOINTER-POINTER(以ws为单位)设置为MYPOINTER的地址,然后显示另一个POINTER-POINTER,并以十六进制显示...。
回到顶部
查看用户资料 发送私信
罗伯特·桑普

全球主持人


已加入:2008年6月6日
帖子:8569
地点:美国爱荷华州迪比克

发布发表:2008年9月25日,星期四,上午12:49
引用回复

从手册的链接部分描述:
引用:
链接部分中的记录描述条目和数据项描述条目提供名称和描述,但是由于数据区域存在于其他地方,因此不保留程序或方法中的存储。


如果调用程序使用单个参数调用COBOL程序,并且该COBOL程序具有PROCEDURE DIVISION USING<one variable>,链接部分的第二个变量中引用的数据区域到底在哪里?它不在调用程序中,仅传递了一个参数。它不在COBOL程序中-链接段字段未分配任何存储空间。当Sriram进行SET时,将有4个字节设置为一个地址-但是哪个4个字节呢?我怀疑这4个字节是导致S0C4的存储位置0000至0003。
回到顶部
查看用户资料 发送私信
CICS家伙

高级会员


已加入:2007年7月18日
帖子:2146
位置:在我的咖啡桌上

发布发表:2008年9月25日星期四凌晨2点05分
引用回复

您可以将链接区域的地址设置为工作存储地址,记录(FD)地址或被调用/调用程序传递的地址以及&fd地址不必为01级。

传递的那个参数是(如果正确完成的话)一个地址。将另一个链接区域设置到该地址可建立该地址的可寻址性。

Picture the 链接部分01s as assembler DSECTs (just as the 01s in the FD are) and the 01s in working storage as CSECTs......
回到顶部
查看用户资料 发送私信
塞迪雷斯瓦拉普

新的用户


已加入:2008年6月18日
帖子:28
地点:印度

发布发表:2008年9月25日,星期四,下午1:40
引用回复

感谢您的所有建议。

我之前尝试过的东西:
1.仅从C传递了一个指针arg,并且在Linkage中具有两个数据项

现在,我已更改链接部分以接受来自C的指针arg,现在正尝试将其设置为WS部分中的POINTER。

但是我的编辑一直说失败

引用:
IGYPS2161-S“ ADDRESS OF”操作数“ MYANOTHERPTR”被作为“ SET”语句的接收操作数,但不是alevel-01或77级“ LINKAGE SECTION”项。


但我已经提到MYANOTHERPTR为01级。

如果编译成功。我将能够正确设置它并显示指针内容吗?

为什么我尝试使用结构指针,因为这是一个通用结构,它将具有包含int的字段,即虚指针。我将基于int字段将空指针类型转换为特定的结构,这是我在C程序中所做的。

我想在COBOL到抄写本的映射结构中实现相同的设计,我不知道是否可以(因为它在这时很早)。

因此,作为一个起点,我试图看看我是否首先可以在Cobol中成功接收到一个指针并进行打印。

工作存储部分。
01 MYANOTHERPTR的使用方式为指针。
链接部分。
01 MYPOINTER的用法就是POINTER。

使用MYPOINTER进行程序划分。
显示“用指针测试钴”。
将MYANOTHERPTR的地址设置为MYPOINTER。
显示“ MYANOTHERPTR:” MYANOTHERPTR

让我知道是否需要进一步的信息。如果任何地方有问题,请纠正我。

感谢你的帮助。
回到顶部
查看用户资料 发送私信
查看上一个主题 :: :: 查看下一个主题  
发表新话题   回复主题 查看书签
所有时间均为格林尼治标准时间+ 6小时
论坛索引 -> COBOL程式设计

 


类似主题
话题 论坛 回覆
该主题已锁定:您无法编辑帖子或回复。 将字段名称传递给COBOL程序 COBOL程式设计 10
没有新帖 COBOL性能调整 COBOL程式设计 6
没有新帖 JCL用于替换Cobol中的代码 JCL和VSAM 7
没有新帖 COBOL VS SORT实用程序,用于文件格式... COBOL程式设计 6
没有新帖 在COBOL创建中进行XML解析"h... COBOL程式设计 0
搜索我们的论坛:

回到顶部