ATL에서 asp페이지로 배열 보내는법
배열을 보내기 위해서는 VARIANT자료형을 활용해야 한다.
코드를 보면 금방 이해가 될까? 되지~
{
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에서는
data = arraydata
Response.Write data(0)
이렇게 하게 되면 뭐가 나올까? Hi 라고 인사를 할것이다.
그렇다면 2차원배열은 어떻게 보낼수 있을까?
{
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에서는
data = arraydata
Response.Write data(0, 1)
근데 여기서 주의 해야 할게 있다.
VARIANT에는 데이터 순서가 반대로 들어간다는거다.
즉, 저걸 호출하면 어떻게 될까? "Hi2"가 나올까? 아니다. 정답은 "babo"가 나온다.
그러면 "Hi2"가 나오게 할려면 어떻게 해야 할까? data(1, 0)이라고 해야한다.
asp에서도 기본 규칙을 지켜야 하므로 넘겨줄때 미리 데이터를 반대로 집어넣어주자. 안그럼 asp개발자는 짜증낼거다. 내가 테스트 해도 짜증난다. 반대반대!!! 꼭 기억하자

이올린에 북마크하기
