Habe jetzt folgendes Testprogramm mal aufgebaut:
Als Ergebnis steht in der hconv ein Return-Wert von -1.Code:H DEBUG DECEDIT('0,') DATEDIT(*DMY.) DFTACTGRP(*NO) D QtqCode_T DS Qualified D CCSID 10I 0 Inz(0) D CvtAlt 10I 0 Inz(0) D SubAlt 10I 0 Inz(0) D ShiftState 10I 0 Inz(1) D InLenOpt 10I 0 Inz(0) D MixDataErrorOpt... D 10I 0 Inz(0) D Reserved 8A Inz(*ALLX'00') D fromCCSID DS LikeDS(QtqCode_T) D toCCSID DS LikeDS(QtqCode_T) D iconv_t DS Qualified INZ D rtn_value 10I 0 D cd 10I 0 Dim(12) D D QtqIConvOpen PR ExtProc('QtqIconvOpen') D LikeDS(iconv_T) D toCCSID LikeDS(QtqCode_T) D fromCCSID LikeDS(QtqCode_T) D hConv DS LikeDS(iconv_T) D Inz(*LIKEDS) D** D iconv PR 10U 0 ExtProc('iconv') D hConv LikeDS(iconv_t) VALUE D pInBuff * VALUE D nInLen * VALUE D pOutBuff * VALUE D nOutLen * VALUE D MyData S 10A Inz('ABCDEFG') D pData S * Inz D ppData S * Inz(%addr(pData)) D nInLen S 10I 0 D nOutLen S 10I 0 D iconv_close PR 10I 0 ExtProc('iconv_close') D hConv LikeDS(iconv_t) VALUE /free fromCCSID.CCSID = 273; toCCSID.CCSID = 1208; hConv = *ALLX'00'; hConv = QtqIconvOpen(toCCSID:fromCCSID); /end-free C eval nInLen = %len(%TrimR(mydata)) C eval nOutLen = %size(mydata) C eval pData = %addr(myData) C callp iconv(hConv : ppData : %addr(nInLen): C ppData:%addr(nOutLen)) C callp iconv_close(hConv) C MOVE '1' *INLR
Ich denke mal dass das ein Fehler ist?
Aber was für einer?
Folgendes erhalte ich in der DS-Anzeige von hConv:
Wenn ich das richtig verstanden habe und iconv sauber gelaufen ist, dann müsste der nInLen anschließend auf 0 stehen richtig?Code:> EVAL hConv HCONV.RTN_VALUE = -1 HCONV.CD(1) = 1077952576 HCONV.CD(2) = 1077952576 HCONV.CD(3) = 1077952576 HCONV.CD(4) = 0 HCONV.CD(5) = 208 HCONV.CD(6) = 8 HCONV.CD(7) = -2 HCONV.CD(8) = -2147483648 HCONV.CD(9) = 0 HCONV.CD(10) = -978493160 HCONV.CD(11) = 671093600 HCONV.CD(12) = 0
Habe ich noch etwas übersehen/falsch implementiert?
![[NEWSboard IBMi Forum]](images/duke/nblogo.gif)



Mit Zitat antworten
Bookmarks