如何使MFCOBOL 兼容Visual COBOL?

~ 0 min
2016-03-03 08:16

Q1. 如何避免此错误:用户在评估版的Windows VM上安装并激活了DBMaster,激活Windows VM后,DBMaster不能启动并报告“无效许可”。 回答1:用户在评估版的Windows VM上安装了激活版的DBMaster 5.2,当激活Windows VM 后,DBMaster报告无效许可。出现此错误属于正常现象,因为我们产生activation.dat是根据Machine ID生成的,而Machine ID和Windows VM操作系统的产品许可相关,所以激活Windows VM后DBMaster不能启动运行并报告“无效许可”。通过“Upgrade” 重新激活DBMaster就可解决此问题。 版本:DBMaster5.x, 4.x 产品:Normal / Bundle 平台:Windows Q2.如何避免使用DBMaster Bundle版本时出现的5388错误? 回答2:如果我们有COBOL程序并且想在Linux系统下通过DCI访问DBMaster(bundle version),那么首先需要编译runcbl运行时,而编译运行时则需要链接libdmapic.so文件。DBMaster为其正式版和Bundle版提供不同的链接文件名。一般情况下,如果相应的文件是libdmapic.a文件,那么在编译运行时时必须保证使用正确的文件名。用户在编译runcbl运行时时会使用libdmapic.a,但是DBMaster Linux bundle版本却不包含libdmapic.a文件,所以当连接数据库时就会返回5388错误(字符集转换工具打开失败)。要避免此错误请使用libdmapic.so文件重新编译runcbl运行时,同时请记住在MAKEFILE中更改libdmapic.a为libdmapic.so。此外,请把LD_LIBRARY_PATH环境参数设置为xxx/bundle,例如:export LD_LIBRARY_PATH=/home/bundle。 版本:DBMaster 5.x, 4.x 产品:Bundle 平台:Linux Q3.如何避免从DBMaster4.1移植数据库到5.2时出现的WARNING63错误? 回答3:

在替换Micro Focus Net Express 为Visual COBOL 之后,当编译COBOL PROGRAM 时我们将发现会面临一些错误(例如“Visual Cobol不支持N type”),所以在使用Visual COBOL 编译COBOL PROGRAM 时需要注意以下四点。

  • 环境变量

32 bit Windows

set path=%path%;C:\Program Files\Micro Focus\Visual COBOL 2010\bin

64 bit Windows

set path=%path%;C:\Program Files (x86)\Micro Focus\Visual COBOL 2010\bin64

  • Microsoft Visual Studio

对于Net Express 5.1, VC的版本是9.0,Visual COBOL 2010R4中VC版本为10.0.,所以我们必须安装正确的版本并且设置正确的PATH。例如,

32 bit Windows

call "C:\Program Files\Microsoft Visual Studio 10.0"\VC\bin\vcvars32.bat

copy "C:\Program Files\Microsoft Visual Studio 10.0"\VC\lib\oldnames.lib .

64 bit Windows

call "C:\Program Files (x86)\Microsoft Visual Studio 10.0"\VC\bin\amd64\vcvars64.bat

拷贝"C:\Program Files (x86)\Microsoft Visual Studio 10.0"\VC\lib\amd64\oldnames.lib .

  • N type的定义

03 WK-N PIC N(50).

03 WK-5 PIC N(01).

Net Express 5.1中的N type被定义为152,在Visual Cobol 2010R4中被定义为168.我们必须在MFDCI中添加一个新的type来映射它。所以只有新的DCI版本支持Visual Cobol的N type。

  • x32 平台的FCD3选项

The File Control Description (FCD)是一个包含文件使用信息的数据区域。这里有两个版本的FCD,使用哪一个取决于COBLE环境运行在32位还是64位系统上。如下表所示:

COBOL Development System

FCD Used

Mainframe Express

FCD2

32-bit Visual COBOL

FCD2

64-bit Visual COBOL

FCD3

.NET Support within Visual COBOL

FCD3

32-bit Server Express

FCD2 or FCD3

64-bit Server Express

FCD3

 

由于"FCD3"在32bit/64bit 上是不同于Net express ,Visual Cobol 的默认选项(32位使用"FCD2",64位使用“FCD3”) 。在32位系统我们需要使用“NOFCD3”进行编译,否则会出现错误114。如下使用:

首先,在xfd.cfg文件(用户可以为xfd.cfg指定路径)中添加以下信息:

NOFCD3 CREATEXFD CALLFH “DBMAKETINTF”

然后执行cbllink命令:

cbllink -oTEST.exe -uxfd.cfg -g -b TEST.cbl oldnames.lib dmmfcbl.lib dmdcic.lib dmapi52.lib

或者

cbllink -oTEST.exe -u C:\test\xfd.cfg -g -b TEST.cbl oldnames.lib dmmfcbl.lib dmdcic.lib dmapi52.lib

另外,我提供一个使用NOFCD3 的新DCI库作为默认选项,用户无需添加其他选项。

cbllink -oTEST.exe -uxfd.cfg -g -b TEST.cbl oldnames.lib dmmfcbl_fcd3.lib dmdcic.lib dmapi52.lib

注意 1:

新的lib仅在32位平台上适用,并不兼容Net Express version (完全不同的数据结构),所以我们重命名lib名为dmmfcbl_fcd3.lib

注意 2:

如果用户想编译COBOL 程序为INT或者GNT格式,因为COBOL命令不能识别NOFCD3 选项,请使用新的lib dmmfcbl_fcd3.lib 来替换dmmfcbl.lib,这样避免错误114的发生。(内存访问违背).。使用方法如下:

编译DBMASTERINTF.dll

cbllink -v -K -L -d -oDBMASTERINTF.dll mfcall.obj oldnames.lib dmmfcbl_fcd3.lib dmdcic.lib dmapi52.lib

编译GNT,执行DBMASTERINTF.dll.

cobol test.cbl CREATEXFD CALLFH "DBMASTERINTF.dll" gnt

版本: DBMaker5.x

产品: Normal /Bundle

平台:All

平均分: 0 (0 投票)

你不能对该内容发表评论

标签