如何使MFCOBOL 兼容Visual COBOL?
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