【发布时间】:2019-05-17 00:13:53
【问题描述】:
我需要将数组从 MicroFocus Cobol 传递给 C# COM 对象。当我只传递字符串或数字时,它正在工作。但是使用数组我收到错误消息:
** 异常 65537 未被 oleexceptionmanager 类捕获。
说明:“服务器定义的 OLE 异常”
(80070057): 参数错误。
**
Cobol 代码:
C $SET DIRECTIVES (SBODBC.DIR) NSYMBOL"NATIONAL"
$set ooctrl(+p)
identification division.
program-id. pokus444.
special-names.
environment-name is environment-name
environment-value is environment-value
decimal-point is comma.
class-control.
ChkAccNum is class "$OLE$CheckAccountNumber.AccountNumbers".
working-storage section.
01 ChkAccNumObj object reference.
01 accA.
05 acc pic x(34) occurs 100.
01 accR pic x(34).
procedure division.
main section.
display "Zacatek programu"
initialize accA accR
move '1234567890' to acc(1)
move '0987654321' to acc(2)
invoke ChkAccNum "new" returning ChkAccNumObj
invoke ChkAccNumObj "CheckAccount" using accA returning accR
display accR
exit
.
C#代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
namespace CheckAccountNumber
{
[Guid("A80930D1-080F-4B04-A2C3-B637428556D6")]
public interface IAccountNumbers
{
[DispId(1)]
string CheckAccount(string[] accounts);
}
[Guid("65A771A0-0DDE-440D-9A4F-C71CEAEE3DF6"),
ClassInterface(ClassInterfaceType.None)]
public class AccountNumbers : IAccountNumbers
{
public AccountNumbers()
{
}
public string CheckAccount(string[] accounts)
{
return accounts[1];
}
}
}
【问题讨论】:
-
但这是关于 Visual Cobol 的,我在 Native Cobol 中
-
很难想象这很重要。请尝试创建一个字符串数组而不是 pic,如 wiki 文章中所示。您可能需要将参数声明为 Array 而不是 string[],这在数组的下限不是 0 时是必需的。