분류 전체보기 (292)
주절주절 (31)
개발 이야기 (36)
웹 이야기 (3)
기사꺼리 (103)
구글 이야기 (3)
책 이야기 (19)
위젯 (7)
재테크 이야기 (2)
성공 이야기 (18)
좋은글 (26)
취미 생활 (16)
링크 (3)
번역이야기 (1)
신문기사 (22)
아이디어 (0)
문서작성 (1)
오늘본것 (1)
주식 (0)
ColorSwitch 00 01 02




블로그코리아

ATL에서 asp페이지로 배열 보내는법

배열을 보내기 위해서는 VARIANT자료형을 활용해야 한다.
코드를 보면 금방 이해가 될까? 되지~

STDMETHODIMP CTest::get_arraydata(VARIANT *pVal)
{
  AFX_MANAGE_STATE(AfxGetStaticModuleState())

 // TODO: Add your implementation code here
 VARIANT v;
// VARIANT형 배열을 넘길꺼다
 v.vt = VT_VARIANT|VT_ARRAY;

 SAFEARRAY* pSA;
// 배열 크기 2
 SAFEARRAYBOUND bnd={2,0};                            
// 자료형은 VT_VARIANT로 하고 1차배열로한다.
 pSA = SafeArrayCreate(VT_VARIANT, 1, &bnd);  

 VARIANT* pVar;
 SafeArrayAccessData(pSA, (void**)&pVar);
// string 데이터를 넣을꺼다
 pVar[0].vt = VT_BSTR;
 pVar[0].bstrVal = SysAllocString(L"Hi");
 pVar[1].vt = VT_BSTR;
 pVar[1].bstrVal = SysAllocString(L"babo");
 SafeArrayUnaccessData(pSA);
 v.parray = pSA;
 
 *pVal = v;
  return S_OK;
}


이렇게 만들어 놓고, asp에서는

Dim data
data = arraydata
Response.Write data(0)

이렇게 하게 되면 뭐가 나올까? Hi 라고 인사를 할것이다.

그렇다면 2차원배열은 어떻게 보낼수 있을까?

STDMETHODIMP CTest::get_arraydata(VARIANT *pVal)
{
  AFX_MANAGE_STATE(AfxGetStaticModuleState())

 // TODO: Add your implementation code here
 VARIANT v;
// VARIANT형 배열을 넘길꺼다
 v.vt = VT_VARIANT|VT_ARRAY;

 SAFEARRAY* pSA;
// 배열 크기 2인 배열2개
 SAFEARRAYBOUND bnd[2]={{2,0}, {2,0}};                            
// 자료형은 VT_VARIANT로 하고 2차배열로한다.
 pSA = SafeArrayCreate(VT_VARIANT, 2, &bnd);  

 VARIANT* pVar;
 SafeArrayAccessData(pSA, (void**)&pVar);
// string 데이터를 넣을꺼다
 pVar[0].vt = VT_BSTR;
 pVar[0].bstrVal = SysAllocString(L"Hi");
 pVar[1].vt = VT_BSTR;
 pVar[1].bstrVal = SysAllocString(L"Hi2");
 pVar[2].vt = VT_BSTR;
 pVar[2].bstrVal = SysAllocString(L"babo");
 pVar[3].vt = VT_BSTR;
 pVar[3].bstrVal = SysAllocString(L"babo2");
 SafeArrayUnaccessData(pSA);
 v.parray = pSA;
 
 *pVal = v;
  return S_OK;
}


asp에서는
Dim data
data = arraydata
Response.Write data(0, 1)

근데 여기서 주의 해야 할게 있다.
VARIANT에는 데이터 순서가 반대로 들어간다는거다.
즉, 저걸 호출하면 어떻게 될까? "Hi2"가 나올까? 아니다. 정답은 "babo"가 나온다.
그러면 "Hi2"가 나오게 할려면 어떻게 해야 할까? data(1, 0)이라고 해야한다.

asp에서도 기본 규칙을 지켜야 하므로 넘겨줄때 미리 데이터를 반대로 집어넣어주자. 안그럼 asp개발자는 짜증낼거다. 내가 테스트 해도 짜증난다. 반대반대!!! 꼭 기억하자
Trackback Address :: http://kindlion.tistory.com/trackback/271









articles
recent replies
recent trackbacks
notice
Admin : New post
BLOG main image
신명나게 개발한번 해봅시다.
7 171488
  rss skin by  m22m
tistory 티스토리 가입하기!