【问题标题】:Passing data between Visual Basic and COBOL在 Visual Basic 和 COBOL 之间传递数据
【发布时间】:2019-11-13 02:35:02
【问题描述】:

我有一个调用 VB6 程序的 COBOL 程序,该程序使用 COM 端口从体重秤读取数据。

STRING WS-PATH, '\', LINK-KEY, '\vb.exe' DELIMITED BY ' ' INTO WS-COMMAND.
CALL   'SYSTEM' USING WS-COMMAND 128 GIVING WS-STATUS.
CANCEL 'SYSTEM'.

数据保存到TXT文件中,然后COBOL程序打开TXT并读取数据。

Dim i_data_file As Integer
    i_data_file = FreeFile
    Open App.Path & "\data.txt" For Binary Access Write As #i_data_file
    Put #i_data_file, , data
    Close #i_data_file
STRING '@[DISPLAY]:', WS-PATH, '\', LINK-KEY, '\data.txt' DELIMITED BY ' ' INTO WS-SOURCE
STRING WS-PREFIX2, WEIGHT-DATANAME DELIMITED BY ' ' INTO WS-TARGET
CALL   'C$COPY' USING WS-SOURCE, WS-TARGET GIVING WS-STATUS
CANCEL 'C$COPY'

到目前为止一切正常,但是是否可以直接在程序之间传递和接收数据而不创建任何文件?

编辑: 所以我创建了一个 DLL 并使用 axdefgen 进行测试:

      * clsMath
           CLASS @clsMath
               CLSID, 073F9971-1BE7-45A7-B50F-82AAAC511268
               NAME, "clsMath"
               PRIMARY-INTERFACE
               DEFAULT-INTERFACE, "_clsMath"
      * fSum
               METHOD, 1610809344, @fSum,
                   "long" @2, TYPE 3,
                   "long" @1, TYPE 3
                       RETURNING "long", TYPE 3

现在我如何调用/传递参数给函数 fSum?我试过这个:

           CREATE clsMath
                  SERVER-NAME IS '128.0.0.220'
                  HANDLE IN WS-TEMP.
           INQUIRE WS-TEMP fSum IN WS-TEMP2.
           DISPLAY WS-TEMP2.

我明白了:

'FSUM' must be a 'get' property or method of '@CLSMATH'

这是否意味着我需要这样的东西?

PROPERTY-GET, 17, @Day RETURNING "short"

【问题讨论】:

  • 你的意思是VB6程序打开文件读取数据?

标签: dll vb6 cobol acucobol-gt


【解决方案1】:

根据您的执行环境,您可能能够调用系统 DLL(使用 CALL)。如果有可能,您可以在 VB6 中创建一个 DLL,通过它您可以使用各种方法(如 Socket)进行通信,或者使您的 VB6 程序成为 COBOL 可以实例化并作为进程外服务器直接与其通信的 ActiveX EXE。

【讨论】:

  • Interprocess communication 在 Windows 中有很多可能性,具体取决于您的需求和/或用于相关进程的编程语言的能力。我想到了一种非常简单(但不安全)的无文件数据交换方法:Windows 剪贴板。
  • 它也可以编译一个 VB6 DLL,使其像标准的“C”DLL 一样可调用。我认为 VBAdvance 有一些机制。这可能是最有可能提供 COBOL 程序可以直接调用的接口。
  • @Étienne 我已经尝试了您的建议并编辑了问题。请指教。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-05
  • 2016-03-24
  • 2017-01-22
  • 2011-12-29
  • 2019-01-12
  • 2022-01-23
相关资源
最近更新 更多