質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

コンパイル

コンパイルとは、プログラミング言語のテキストソース(ソースコード)をコンピュータ上で実行可能な形式(オブジェクトコード)に変換することをいいます

COBOL

COBOL(COmmon Business Oriented Langage)は、実務処理用に開発されたプログラミング言語です。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

1回答

691閲覧

VisualCOBOLでActianZenの言語インターフェースを使えるようにする

dende_papa

総合スコア1

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

コンパイル

コンパイルとは、プログラミング言語のテキストソース(ソースコード)をコンピュータ上で実行可能な形式(オブジェクトコード)に変換することをいいます

COBOL

COBOL(COmmon Business Oriented Langage)は、実務処理用に開発されたプログラミング言語です。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2022/12/13 06:38

前提

マイクロフォーカスCOBOLとBtrieveAPI(ActianZen)を使ってシステムの開発をしています。

環境

マイクロフォーカスVisualCOBOL Ver.8.0

OS:Windows11 64Bit

BtrieveのデータはVer.6.x形式以降(最新バージョンと読み書きの互換性あり)

インターフェース:COBOL SDK for Zen / PSQL ↓ 

https://www.agtech.co.jp/actian/support/reference/sdk/access_methods/cobol_info/

実現したいこと

COBOLのソースコードと上記インターフェースのNTBT64.LIBをコンパイラ時にリンクし、システムでBtrieveAPIを呼ぶ。

発生している問題

いくつかあるシステムの中で一つだけランタイムエラーが発生してしまう。

イメージ説明

すべてのシステムが同じようなディレクトリ構成になっていますが、エラーが発生するのは一つだけです。それ以外は正常に動作しています。コンパイル時にエラーなどはなく、ライブラリはリンクできているように思います。

問題個所

コンパイルする際のbatファイルはこんな感じです。

ディレクトリやファイル名はちょっと変更していますが、他のシステムすべて同じようにコンパイルしています。

PATH=C:\Program Files (x86)\Micro Focus\Visual COBOL\bin; c: CD\system\system01 :system01_source echo *---------------------------------------------------------------------* echo * system01_source メニュープログラムのコンパイル中 echo *---------------------------------------------------------------------* echo on COBOL C:\Users\username\Desktop\cbl_src\src\system01_source obj case; echo off if errorlevel 1 goto nocob echo *---------------------------------------------------------------------* echo * system01_source プログラムのリンク echo *---------------------------------------------------------------------* :linkc echo on CBLLINK -g -oC:\system\system01\system01_source.EXE C:\Users\username\Desktop\cbl_src\src\system01_source+c:\cobol\lib\NTBT64.LIB

システムを動かす際のbatが以下になります。

set cobsw=+s5 path=\tool\iiiwin;\tool\bti;\Program Files (x86)\Micro Focus\Visual COBOL\bin; cd\system\system01 PSRUN system01_source.EXE

iii/winというGUIエンジンを利用して画面を作成していますので、上記のPSRUNというコマンドはそのエンジンを起動するコマンドですので今回の事象には無関係です。

実際Btrieveで利用するdllファイルは上記のbtiというフォルダに配置してあり、他の動作するシステムも同様です。

呼び出し時のソースコードは下記です。

CALL '_BTRV' USING B-CODE,B-STATUS,POS-KIH,KIH-REC,BUF-KIH,KEY-KIH,KEY-NUM.

ソースコードもコンパイル時も特にエラーはありません。

そもそもAPIのdllがコールできていないのが、なぜか特定のシステムだけなのが不思議です。

上記のCall分だけコメントアウトするとランタイムエラーは発生せずシステムが起動します。

Call出来てないのでソースが間違っている以前の問題かと思います。

試したこと

システム環境変数でdllのフォルダにパスを通す。

システムと同じディレクトリにdllを持ってくる。

LIBファイルとdllファイルを再インストールしてコンパイルしなおす。

32bit版と64bit版と両方で試す。

bat上でパスを通す。

ディレクトリ構成を変えてみる。

など

ネットで検索してもそれらしい情報は出てきません。

インターフェースの使い方に沿ってやってると思うのですが。。。

他のシステムは動作しますし。

補足情報

なんでも良いので試せること、ヒントなど情報があればと思い投稿します。

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

すべてのソースファイルの冒頭に

COBOL

1$SET LITLINK"2"

を追加することで解決しました

投稿2022/12/22 06:28

dende_papa

総合スコア1

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問