gpt4 book ai didi

c# - 将 safearray 中的 PIC N(n) 传递给 COM 对象

转载 作者:太空宇宙 更新时间:2023-11-03 12:01:33 25 4
gpt4 key购买 nike

我正在 MicroFocus Cobol 中创建这个安全数组(用于传递给 COM 对象):

           move VT-BSTR to w-vartype
move 1 to w-dimension
compute w-y = a-x * 2
move w-y to cElements of w-saBound(1)
move 0 to llBound of w-saBound(1)
invoke OLESafeArray "new"
using by value w-vartype w-dimension
by reference w-saBound(1)
returning w-accArray
end-invoke
move a-x to cElements of w-saBound(1)
invoke OLESafeArray "new"
using by value w-vartype w-dimension
by reference w-saBound(1)
returning w-modArray
end-invoke

initialize w-x
perform varying w-Index from 0 by 1 until w-Index >= w-y
add 1 to w-x
move n'aaa' to acc-bank-acc-num
invoke w-accArray "putString"
using by reference w-Index
by value 68
by reference w-acc-num(w-x)
returning w-hresult
end-invoke
add 1 to w-Index
invoke w-accArray "putString"
using by reference w-Index
by value 68
by reference w-acc-result(w-x)
returning w-hresult
end-invoke
end-perform

perform varying w-Index from 0 by 1 until w-Index >= a-x
invoke w-modArray "putString"
using by reference w-Index
by value 4
by reference w-acc-mod(w-Index + 1)
returning w-hresult
end-invoke
end-perform

当我传递 PIC X(n) 变量时(示例 w-acc-numw-acc-result 等。) 一切都好。但是我需要处理Unicode字符串,所以数据类型必须是PIC N(n)。然后导致 COM 对象 (.NET C#) 是错误的,例如:

  • 我正在发送:“1072907036”
  • 但在 COM 对象中我收到:“1\00\07\02\09\00\07\00\03\06\0”

我想,问题出在 VT_BSTR 类型上,我应该改用 VT_VARIANT 吗?如果是这样,如何正确使用 VT_VARIANT 的 safearray?我还将这个数组返回给 COBOL。

最佳答案

VT_BSTR 是一个 Unicode 字符串。所以我希望您在安全数组上调用的方法将 pic x(..) 转换为 Unicode BSTR。它只会获取 PIC N 缓冲区并进行转换。

如果您将这些字符作为 sbcs(单字节字符集),那么它应该作为字符串传递并在途中转换为 BSTR。

如果使用 N""国家文字,那么请确保您使用 NSYMBOL"NATIONAL"指令,否则系统可以将其解释为 DBCS 文字。

关于c# - 将 safearray 中的 PIC N(n) 传递给 COM 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56808396/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com