|
Send e-mail to get answer.
modified on Tuesday, March 10, 2009 10:16 AM
|
|
|
|
|
do you know what "ertain types of objects" are created using CRT heap? and why is a necessary?
Further, it seems unecessary to allocate a heap per CRT copy, in stead of let all CRTs use exe. heap, which is what heap meant to be.
So if the CRT heap exists, it must have a good reason. The reason lies on the data stored in the heap, what data and why stored there?
|
|
|
|
|
"d now there matching everything as if the object was created at the local heap" this is odd, then there is no need to allocate a heap for CRT.
is all this back-compatible consideration? the original CRT developers use this mechanism for some specific reason that is rarely used today but for compatible's sake Microsoft still maintain this feature?
|
|
|
|
|
Send e-mail to get answer.
modified on Tuesday, March 10, 2009 10:16 AM
|
|
|
|
|
Send e-mail to get answer.
modified on Tuesday, March 10, 2009 10:17 AM
|
|
|
|
|
Gorgeous! The best answer i have ever got since I have started asking for help in the internet! And I spend almost an hour to chew this answer. Thanks a ton! To make sure I've understood what you are saying,are you saying if each dll's referred CRT copy's version are the same, their would be no problem creating an object in this dll and deleting in another because they use the same allocator the same allocating algorithm??
|
|
|
|
|
Send e-mail to get answer.
|
|
|
|
|
Hehe, I got it.
And I'm waiting for the moment I have to allocate-deallocate memory across dll boundries in my job, before that I may be follow the rule: if you get a pointer to newly created memory by a dll, then you have to use a function in this dll and past this pointer as a parameter to it to delete( release indeed) the memory.
|
|
|
|
|
Send e-mail to get answer.
modified on Tuesday, March 10, 2009 10:17 AM
|
|
|
|
|
I read a lot of arctiles in heap management these days.
you can goole "free lists lookaside table filetype:ppt" and there a bunch of useful infomation. I find a serious problem:
1.all mallocs and frees in different versions of CRT of Windows call the same RtlAllocateHeap(), and RtlFreeHeap(), and all infomation needed by RtlAllocateHeap,and AtlFreeHeap() was builded by ntoskrnl.exe. It seems to me that malloc and free don't need to interact with CRT.
What specific info is contained in CRT, rather than process management field(PEB or sth.)?
|
|
|
|
|
you can see:
Dynamic Memory Management.ppt for more info.
|
|
|
|
|
"A heap descriptor"?
you mean "heap structures"? which contain Freelists, Lookaside Lists and the like and which reside in the front of A heap?
Does CRT change the content of heap descriptor directorly or it was edited while inside RltHeapAllocate or RltFreeHeap? It seems to me the latter one is safer and more reasonable.
The second question, yes, the debug and release version does contain different info of heap, because debug version want to provide more info such as heap memory leak, heap memory overflows, etc.
What's the main differneces between each release versions?
I discover one, which you can see in page 32 in XPSP2 Heap Exploitation.ppt( you can find this on internet, or i can send you by email)
And I want to make sure that: chances are that when one copy of CRT is mapped to process memory address in DLLMain(), its own heap can be initialized. Can this happens because I saw this opinion in some articles. But you are saying there are only one heap-the default heap for each version of CRT to malloc and free. Are you sure with what you are saying?
|
|
|
|
|
Shall we talk on MSN?
my MSN is dingxiaofenguni@gmail.com
|
|
|
|
|
as you know, we have to create a dynamic splitter window within CFramWnd::OnCreateClient. In this way, we have one or two splitter box as soon as the application is executed! But I want to create the splitter window using a command from the manu bar. Is it possible? Why if not?
Thank you masters!
|
|
|
|
|
You keep reposting this yet you never responded to the first reply you got. Stop doing that PLEEEEZZZZ, it's urgent.
|
|
|
|
|
Dear fellow programmers!
I would like to retrieve an array of POINTs describing the edge of a existing region. There is a CRgn function CreatePolygonRgn() which takes an array of POINTs and creates a CRgn. Is there a function to retrieve the POINTs again?
Please help: I've used up at least a whole redwood on google searches.
Thanks,
Jonnie
|
|
|
|
|
My guess:
CRgn::GetRegionData->RGNDATA->RGNDATAHEADER
You can get the points from rcbound from the below structure
typedef struct _RGNDATAHEADER {
DWORD dwSize;
DWORD iType;
DWORD nCount;
DWORD nRgnSize;
RECT rcBound;
} RGNDATAHEADER, *PRGNDATAHEADER;
MSDN[^]
ADDED:
oops, there's a better function:
CRgn::GetRgnBox[^]
He never answers anyone who replies to him. I've taken to calling him a retard, which is not fair to retards everywhere.-Christian Graus
|
|
|
|
|
Thank you VuNic for the quick reply. If my CRgn is not a rectangle, however, this will not solve my problem.
I suppose I could navigate through all RECTs in the RGNDATA struct, creating one POINT for each corner. However, 1) I was hoping there was a function which does this for me and 2) I suspect it is not as easy as it sounds (what if it's a complex region?).
So, I am still hoping for a solution, e.g. a GetPointsFromRegion(CRgn* pRgn, POINT* pPoints, BYTE* pTypes, int& nCount) function.
Greetings,
Jonnie
modified on Friday, March 6, 2009 10:18 AM
|
|
|
|
|
I found these "keywords"
//--- copy points to original structure ---
::CopyMemory((LPBYTE)dwOffsetAddr, lpPointsFx, nPtBufSize);
Here:
http://www.codeproject.com/KB/graphics/TTPolygon.aspx?display=PrintAll[^]
You may check that one. I'm not very sure though.
He never answers anyone who replies to him. I've taken to calling him a retard, which is not fair to retards everywhere.-Christian Graus
|
|
|
|
|
GetRegionData() can give you RECT structures that CRgn consists of as well as a bounding rectangle.
CRgn does not consist of points so you can retrieve them only by taking them from RECT structures, and not retrieving those you've passed to CreatePolygonRgn().
To get points is not possible because if you have points (0,1) (0,3) (0,4) the line (0,1)-(0,4) would be the edge of the region but (0,3) would be lost.
To get edging points from RECT structures is trivial but they do not have to match what you've passed to CreatePolygonRgn() at all.
|
|
|
|
|
Thanks for the clear explanation Aleksandar. I will try implementing my own GetPointsFromRegion() function using the RECT structures.
Greetings,
Jonnie
p.s. I'm surprised this isn't implemented in the CDC or CRgn classes though.
|
|
|
|
|
CRgn does not have to be rectangular, if it has rounded corners or is elliptical, the edge points do not have too much sense to be extracted the same way it is the case for those rectangular.
However, the math definition of region is then quite puzzling . A square that can be a circle
Since we have GetRegionData for rectangular one, getting points from it is really not a problem. Why didn't they make a function for points? The points are not sufficient to define a way a region is really drawn. We could ask why they didn't make a function to extract edges then the same way. Both points and edges and more can be easily obtained from RECT structures.
modified on Friday, March 6, 2009 12:12 PM
|
|
|
|
|
Well - calculating the edge of the region from the RECTs is proving not quite so trivial (imagine a region in the shape of a rainbow or a four leaf clover ). The RECTs are ordered top to bottom, left to right. The algorithm to figure that out is more than I can manage tonight. I'll be back, as the Austrians say.
Jonnie
|
|
|
|
|
Neither is getting precise all edge points from a mixed rounded or elliptical region Maybe Egyptian 22/7 might help there, if a circle is small enough
|
|
|
|
|
If CRgn is actually a number of rectangles, perhaps the nearest you will get is to use FrameRgn to draw a border round the region (or a off-screen copy of the region) in some colour. Then look for something to give you the all pixels/points of that colour starting from a point on the region.
|
|
|
|