|
I must admit that I misread your question at first. I thought you wanted physical addresses as opposed to virtual addresses.
vikrams wrote: So I meant to day that when I request for the memory from where the OS gives me memory by reserving the space from actual Main memory or from page file?
Malloc and new, will use your process local heap, which will just ask the kernel for a chunk of memory every now and then. It's up the OS to decide where your chunk of memory will actually reside - it will try to be as efficient as possible.
Functions like VirtualAlloc() allows you to specify that you must be given physical memory. I suppose that misusing this function may render the system unusable though. It depends on how strong the contract between the caller and the kernel is. If the kernel comes to the conclusion that "I really really really have to swap these pages out to disk now!" and you have specified MEM_PHYSICAL, the outcome can be one of two: it keeps the promise it gave with VirtualAlloc() or it silently moves your physical pages to disk despite your requirements. Maybe someone here in the forum could explain more about such memory allocations. You could always google for VirtualAlloc() and see if there are any articles out there describing the details about allocating physical memory pages.
I recommend checking out Old New Thing[^]. I'm sure that blog has covered allocating memory using this function.
--
Verletzen zerfetzen zersetzen zerstören
Doch es darf nicht mir gehören
Ich muss zerstören
|
|
|
|
|
Okey.
Here I tried writing simple program on windows which will allocate huge chunk of memory. When I ran the program with Windows task manager open (performance tab) it shows the physical memory utilization is increased.
|
|
|
|
|
If there is enough physical memory available, Windows will do its best to give it to you.
--
Verletzen zerfetzen zersetzen zerstören
Doch es darf nicht mir gehören
Ich muss zerstören
|
|
|
|
|
Say if we ve certain private methods along with private data members and public methods.
other than friend functions is thr any other way we access these members(they being private only) directly. its one of the requirements in a project of mine.
plz hlp
There are only two kinds of people who are really fascinating-people who know absolutely everything, and people who know absolutely nothing.
Oscar Wilde (1854-1900)
SH UVIK
|
|
|
|
|
Yes. If you know the binary layout of the objects, you can always access the data. If you are protecting sensitive data by making it private, it will not be sufficient.
class Class {
private:
int mySecretInt;
....
};
Class obj;
int* ptrToSecretInt = (int*)(((unsigned char*)&obj) + offset);
*ptrToSecretInt = 1234;
From a language point of view, there is no standard and portable way to access the data.
--
Verletzen zerfetzen zersetzen zerstören
Doch es darf nicht mir gehören
Ich muss zerstören
|
|
|
|
|
if we are given n .obj file n header file is tht u mean i can carry out the above. I mght nt have the source code.
There are only two kinds of people who are really fascinating-people who know absolutely everything, and people who know absolutely nothing.
Oscar Wilde (1854-1900)
SH UVIK
|
|
|
|
|
Wat abt functions...
In case we've a void return type is it possible to type cast it to the (void *) and can get an access.
ur code was givin access violation error so instead we did the following
<code>
class A {
private:
int a;
int b;
public:
A()
{
a=0;
b=10;
}
void show()
{
cout<<b;
}
};
int main(void) {
A x;
int* ptr = (int*)&x;
ptr++;
*ptr = 20;
x.show();
return 0;
}
</code>
There are only two kinds of people who are really fascinating-people who know absolutely everything, and people who know absolutely nothing.
Oscar Wilde (1854-1900)
Regards...
Shouvik
|
|
|
|
|
The real prob comes when accessing function.
say we've classes ported to us in .obj format. then going for DMA using pointers is a risky n unreliable job.
class x
{
private:
void meth1()
{
cout<<"Meth1";
}
void meth2()
{
cout<<"meth 2";
}
};
class xduplicate
{
public:
void virtual meth1();
void virtual meth2();
};
main()
{
x obj;
xduplicate *obj1;
obj1=(xduplicate *)&obj;
obj1->meth1();
}
we can access meth1 only if in class x it is virtual. i.e. the entry is in the virtual table.
But now i cant jst change the native code ported to us. i've to anyhow access the private methods without any change in native code.
wht we're plannin is x will be the producer class n xduplicate the consumer class.
x will be available as .obj along with .h file
so how can 1.
There are only two kinds of people who are really fascinating-people who know absolutely everything, and people who know absolutely nothing.
Oscar Wilde (1854-1900)
Regards...
Shouvik
|
|
|
|
|
most unproffesional way would be
#define private public
bt disadv is all not required private members become open.
hope u can understand the scenario now.
There are only two kinds of people who are really fascinating-people who know absolutely everything, and people who know absolutely nothing.
Oscar Wilde (1854-1900)
Regards...
Shouvik
|
|
|
|
|
You have to define your security boundaries, and who you trust. Can the class trust the code? If so, then all is fine. If not, well, then you'll have to resort to other means of storage of sensitive data. It's very very hard to perfectly protect data as you can imagine.
"How well do you want to protect your data, and against whom?" - that is the question you have to ask yourself.
If it's hackers you are going to protect yourself from, then you can at most buy yourself some time. Anyone with enough time and wit will get to your data eventually...
--
Verletzen zerfetzen zersetzen zerstören
Doch es darf nicht mir gehören
Ich muss zerstören
|
|
|
|
|
this isn't a very critical data sensitive issue but to access the code in the form of ported .obj format whr i cant chng the code itself. hence it is of utmost importance tht i have a method in my appl to acces the member methods. at the same time the source .obj file remains unaltered.
hope u could get the scenario
There are only two kinds of people who are really fascinating-people who know absolutely everything, and people who know absolutely nothing.
Oscar Wilde (1854-1900)
Regards...
Shouvik
|
|
|
|
|
Dear All,
How can i register a COM exe ?
Please
Nice things do nice works
|
|
|
|
|
There may be a few ways to do it. There are command line parameters that a OOP COM Server may pay attention to, like /register , /regserver , or /regsvrservice , and you may be able to use REGSVR32 on the EXE.
It should also register its Proxy/Stub DLL and its Type Librarys (if any), or you may have to do that yourself to get a COM client to use it correctly.
Peace!
-=- James Please rate this message - let me know if I helped or not!<HR> If you think it costs a lot to do it right, just wait until you find out how much it costs to do it wrong! Avoid driving a vehicle taller than you and remember that Professional Driver on Closed Course does not mean your Dumb Ass on a Public Road! See DeleteFXPFiles
|
|
|
|
|
Use can use keyword /regserver for registering com exe
eg: "C:\sampleCOM.exe" /regserver
|
|
|
|
|
Good People,
I'm writing a few class that will draw items to a view based on user preferences and information in a database. As a result, I am using GDI objects like CFont, CPen, CBrush, CBitmap, etc... However, I am finding it very difficult to pass these GDI objects in the copy constructors of my classes. Apparently, these GDI objects don't have an "=" operator, nor a copy constructor. So I can't return them by value, nor use "=" to set them. I thought about passing a pointer to it, but won't it go out of scope? At any rate, does any one have any good suggestions? Sometimes, I wonder if these objects were even intended to be member variables of classes. Also, how do I pass GDI objects during copy construction, or from one class to another?
Thanks,
BP
-- modified at 10:07 Thursday 4th January, 2007
|
|
|
|
|
One way is to pass the the associated handles around. They all have in common a HGDIOBJ.
You can use the Attach() and Detach() methods to associate/disassociate the HGDIOBJ with an MFC
CGdiObject object.
Mark
|
|
|
|
|
Thanks Mark, can you show me an example of how to do this?
Thanks,
BP
|
|
|
|
|
Here's 1 way - sharing the GDI object between instances of a class:
class CMyClass
{
CBitmap Bitmap;
public:
CMyClass() {}
CMyClass(const CMyClass &);
};
CMyClass::CMyClass(const CMyClass &src)
{
Bitmap.Attach(src.Bitmap.m_hObject);
} This is not necessarily a good idea since there's no way of tracking the use of the shared object.
IMO a better method is to create new objects for each instance of the class:
class CMyClass
{
CBitmap Bitmap;
void CreateGDIObjects();
public:
CMyClass() {CreateGDIObjects();}
CMyClass(const CMyClass &);
};
CMyClass::CMyClass(const CMyClass &src)
{
CreateGDIObjects();
}
void CMyClass::CreateGDIObjects()
{
Bitmap.LoadBitmap(...);
}
You could also write the code to clone the GDI objects by extracting enough info from the objects
to create a duplicate object. Too bad MFC doesn't have that already
|
|
|
|
|
Thanks Mark, the information you have provided has been very helpful.
BP
|
|
|
|
|
You're welcome
The more I think about that first example, the less I like it. If you absolutely MUST share the
same GDI objects between instances of a class then maybe this is a better solution (note that
it's NOT thread safe);
class CMyClass
{
static DWORD RefCount;
static CBitmap Bitmap;
public:
CMyClass();
~CMyClass();
CMyClass(const CMyClass &);
};
DWORD CMyClass::RefCount = 0;
CMyClass::CMyClass()
{
if (RefCount == 0)
Bitmap.LoadBitmap(...);
RefCount++;
}
CMyClass::CMyClass(const CMyClass &src)
{
RefCount++;
}
CMyClass::~CMyClass()
{
RefCount--;
if (RefCount != 0)
Bitmap.Detach();
}
|
|
|
|
|
Thanks again Mark.
I am wondering, is there perhaps a different strategy that I should use. Since all the images will be imported as resources, should I just have variables to remember the different GDI object settings and then instantiate them using those variables rather than attempting to copy them. What do you think about that strategy? How hard would it be to do that? Could I do it using a LOG structure (i.e. LOGPEN or LOGBRUSH).
Thanks,
BP
|
|
|
|
|
hmm...
For pens, brushes, fonts there's not much problem. They can be selected into multiple DCs and
they don't change. Thus, they can be kept around like a "GDI toolbox" and used as needed.
Bitmaps will be the trouble. They can only be selected into one memory DC at a time.
I guess it depends how they're used...
For high-performance situations like "sprites" being blt'd often in animation you may want to
keep them selected into a memory DC for fast blting, so you'll need a copy for each DC.
For low-performance situations (for example, the bitmaps only get redrawn when a WM_PAINT event
occurs) then one bitmap used by all is fine. A bitmap could be selected into a DC, Bltd, and de-
selected from a DC as needed. If this is done by multiple threads then a simple sync object can
be used to prevent use in more than one dc at a time.
Mark
|
|
|
|
|
Indeed, how do I "keep them around" between classes and select them into the DC? I am also thinking about using pointers and "new". Would smart pointers help?
Is there another image class I can use that would make it easier (i.e. CImage or something here on CodeProject that you know works well)?
Thanks again,
BP
|
|
|
|
|
BlitzPackage wrote: Is there another image class I can use that would make it easier
No matter what class you wrap them in you'll still have the same issue, so use whatever is best
for your situation I'd say .
If your plan is to share one copy application-wide then yes, you'll probably want an implementation similar to a smart pointer. You'll also need a way to track when a bitmap is "in use" (selected into a DC). You could wrap them in a class that combines smart-pointer
functionality with some kind of indicator or sync object for thread syncronization if necessary.
|
|
|
|
|
Thanks Mark, I appreciate all your help.
BP
|
|
|
|