现在的位置: 首页 > 综合 > 正文

ABAP中接收.NET语言byte[]类型返回值问题

2013年11月08日 ⁄ 综合 ⁄ 共 884字 ⁄ 字号 评论关闭

  在公司自开发的一个项目中,使用了.NET编写的视频监控控件。控件提供了CutBytePicture接口函数用于截取视频图片,返回图片字节流。.NET函数原型如下:

public byte[] CutBytePicture();

按SAP官方文档(RFC To .NET Data Type Mapping),byte[]类型参数应该使用X,RAW类型来接收返回值.

所以,我在ABAP中,使用XSTRING类型的RESULT参数来获取数据,如下。

METHOD CUT_BYTE_PICTURE.
CALL METHOD CALL_METHOD
EXPORTING
METHOD = 'CutBytePicture'
IMPORTING
      RESULT = RESULT.
CALL METHOD CL_GUI_CFW=>FLUSH
*    exceptions
*      cntl_system_error = 1
*      cntl_error        = 2
*      others            = 3
  .
IF SY-SUBRC <> 0.
*   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
RAISE ERROR_CNTL_CALL.
  ENDIF.
ENDMETHOD.

但是,虽然sy-subrc的值一直为0,但RESULT总接收不到数据,后来我将参数改成X、RAW、X类型内表类型都不行。时间紧,没办法再研究类型映射了,

最后,在.NET控件中,新增加了一个方法

public string CutHexPicture();

功能是将CutBytePicture()返回的byte[],转化成十六进制串返回,在ABAP中使用XSTRING接收,得到了正确的结果。

 

写在这里主要说明:

当ABAP接收byte[]类型值时,可以将byte[]先转换成十六进制串,再在ABAP中使用XSTRING来接收。

另外,有哪位朋友实现过ABAP接收byte[]类型数据,也请让我学习一下,谢谢!

抱歉!评论已关闭.