|
초보빌더 님이 쓰신 글 :
: 만약
:
: TList *list = new TList;
:
: list->Add(동적배열);
:
: 이 들어갔을경우
: list->Items[0] 의 사이즈를 구할려면 어떻게 해야하는지 궁금합니다.
:
: int nSize = sizeof(list->Items[0]);
: 를 이용할경우에는 동적배열이 포인트이기때문에 무조건 4바이트가 나오는거 같습니다.
:
: 동적배열이 생성댈시의 정보를 갖고 있지 않고 있을때 TList 안의 메소드중에 아이템사이즈를 구할수있을까요?
:
:
: 도와주세요.. ;ㅁ;
할수는 있겠지만 느리고, 클래스 배열에 한해서는 잘 작동 하지 않을 수 있긴 합니다만 방법을 알려 드리지요;;
#include <Tlhelp32.h>
int GetVoidPointerSize(void *nPoint)
{
int pid = (int)GetCurrentProcessId();
HANDLE hSnap;
HEAPLIST32 hl;
HEAPENTRY32 he;
hSnap = CreateToolhelp32Snapshot( TH32CS_SNAPHEAPLIST, pid );
if( hSnap == (HANDLE)-1 ){ return 0; }
hl.dwSize=sizeof(HEAPLIST32);
if (Heap32ListFirst(hSnap,&hl))
{
do
{
he.dwSize=sizeof(HEAPENTRY32);
if (Heap32First(&he,pid,hl.th32HeapID))
{
do
{
if( he.dwAddress == (DWORD)nPoint )
{
// get kernel heap allocation chunk size
char *t = (char*)(((unsigned char*)he.dwAddress) - 2);
return he.dwBlockSize - *(t);
}
} while (Heap32Next(&he));
}
} while (Heap32ListNext(hSnap,&hl));
}
CloseHandle(hSnap);
return 0;
}
먼저 이 함수를 등록 하시고,
사용 하실 때는
int nSize = GetVoidPointerSize(list->Items[0]);
이렇게 사용 하시면 됩니다...;;
극단 적인 방법이긴 하지만; 불가능 한건 아닙니다 ㅠㅠ
ps. 더 좋은 방법이 있을 수 도 있습니다;;
|