2011-07-05 3 views
0

활성 -x 구성 요소의 바이트 배열을 html 형식의 숨김 필드에 저장하고 양식을 통해 서버에 전달하고 싶습니다. 제출하십시오. 어떻게해야합니까?SAFEARRAY (바이트 배열)을 HTML 숨겨진 필드에 넣는 방법

에 관한 :

HRESULT Data([out, retval] SAFEARRAY(VARIANT) *pArray); 

C++/ATL

STDMETHODIMP MyActiveX::get_Data(SAFEARRAY **pArray) 
{ 
    CComSafeArray<BYTE> arr;  
    for (int i = 0; i < 10; i++) 
    { 
     CComVariant a; 
     a = (BYTE)i; 
     arr.Add(a); 
    } 

    arr.CopyTo(pArray); 
    return S_OK; 
} 

자바 스크립트 : 나는 당신의 정확한에 익숙하지 오전하지만 형식이 일치하지

+0

나는 activceX에 대해 아무것도 모르지만 나는 데이터에'.toString()'과 같은 것을 제안 할 것이다. –

+0

죄송합니다, @James, toString()은 "Object Object"를 내게 넘깁니다 –

+0

'toString()'이 "Object Object"를 반환한다는 것은 의미있는 방식으로 객체에 toString()이 구현되어 있지 않음을 나타냅니다. 내 대답을 보라. –

답변

1

:

$("#hiddenField").val(myActiveX.Data); 

브라우저 나에게 말한다 상황 이온, 전에 비슷한 상황을 봤어.

$('#hiddenField')을 사용하여 입력란에 데이터를 입력해야합니다. 해당 필드에 name 속성을 넣어 HTTP 제출의 일부가되는 경우 해당 부분이 좋습니다.

myActiveX.Data의 경우, 나는 이것이 일종의 JavaScript 객체라고 생각합니다. HTML 입력에는 문자열 만 입력 할 수 있습니다. 바이너리 데이터를 보관하지 않습니다.

내가하려는 것은 $("#hiddenField").val(myActiveX.Data); 앞에 중단 점을 넣는 것입니다. 익숙하지 않은 경우 debugger 키워드를 사용하십시오. 디버거에서 코드를 실행하고 값의 구조를 살펴보십시오. 아마도 일종의 래퍼 필드를 가지고있을 것입니다. 당신이 좋은 자바 스크립트 디버거에 액세스 할 수없는 경우

대안은 내가 C를 믿고있어

for(x in myActiveX.Data) 
alert(x + ": " + myActiveX.Data[x]); 
0

"다음 ++ 코드는 서버 측 코드입니다보십시오.

가장 좋은 방법은 이것은 SAFEARRAY을에는 직렬화하는 것입니다 처리합니다. 당신은 두 가지 방법으로 처리 할 수 ​​거기에서. 첫째

, 직렬화를. 내가 MSDN을 검토 한 결과 내가 선택로 (LPSAFEARRAY_MarshalLPSAFEARRAY_Unmarshal를 사용하여 생각 10 또는 IUnknown 유형을 지정하려면 IID를 사용하지만 사용 방법은 설명서에 나와 있지 않음) 또는 LPSAFEARRAY_UserMarshalLPSAFEARRAY_UserUnmarshal을 사용하여 SAFEARRAY를 직렬화 된 형식으로 변환하거나 직렬화 된 형식으로 변환하십시오.

둘째, 데이터 전송을 처리합니다.

  • 옵션 1 : 직렬화 된 데이터를 서버 측에 저장하고 저장된 파일을 나타내는 토큰을 숨김 필드에 넣습니다.
  • 옵션 2 : Hex, Base64 등을 사용하여 데이터를 인쇄 가능한 형식으로 인코딩하고 해당 데이터를 숨겨진 필드에 넣습니다.

어느 쪽이든 데이터를 다시 가져올 필요가있는 경우 일치하는 기능으로 역순으로 연결하면됩니다.

관련 문제