Я создаю этот защищенный массив в 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-num
, w-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
вместо этого?И если это так, то как правильно использовать safearray из VT_VARIANT
s?И я также возвращаю этот массив обратно в COBOL.