|
Almost whatever you do in C++, you access RAM Of course you can only access memory managed by your process, otherwise your program will generate "Access violation" exception.
Vagif Abilov
MCP (Visual C++)
Oslo, Norway
Hex is for sissies. Real men use binary. And the most hardcore types use only zeros - uppercase zeros and lowercase zeros.
Tomasz Sowinski
|
|
|
|
|
You can access all memory mapped to application address space, randomly mapped to physical RAM by OS. If you need to access a physical RAM, you need to go down to driver level, if it's possible at all.
Pavel
Sonork 100.15206
|
|
|
|
|
Can u provide me with some api level information for it
Samir Sood
|
|
|
|
|
|
I have several constant variables that I want to use in my applications. What do you thing is best to define in a common header file?
#define VALUE 5
or
const int VALUE = 5;
?
Best regards,
Alexandru Savescu
|
|
|
|
|
using const is more C++ convenient. Also the debugger knows the value of the symbol. No overhead in resulting code.
But I'm used to #define, and it's hard to chnge the routine
Pavel
Sonork 100.15206
|
|
|
|
|
Pavel Klocek wrote:
using const is more C++ convenient
I thought so!
Pavel Klocek wrote:
But I'm used to #define, and it's hard to chnge the routine
Yes, so was I, no I am starting to change it and begin use const, or enums or static members in classes. This can also help hide some implementation details.
Best regards,
Alexandru Savescu
|
|
|
|
|
|
I agree. However, do you find macros useful? Or are they old fashioned and C-style (not c++)?
Best regards,
Alexandru Savescu
|
|
|
|
|
Alexpro wrote:
However, do you find macros useful?
Rarely. Sometimes they're useful for blocks of repeated code (a'la BEGIN_MESSAGE_MAP).
Alexpro wrote:
Or are they old fashioned and C-style (not c++)?
It depends who you ask
Tomasz Sowinski -- http://www.shooltz.com
** Putt knot yore thrust inn spel chequers. **
|
|
|
|
|
you should use inline functions rather than macros, there is more type checking and problems can be found ealier.
as far as #define or const int,
i'm not too sure of what the VC compiler does ( i'm pretty sure it gives an error ) if two global variables have the same name in an object file. But other compilers might just allow multiply defined globals which can be a nightmare to track down.
stick to #define for just numbers.
Asim Hussain
e: asim@jawache.net
w: www.jawache.net
|
|
|
|
|
Generally, const is preferrable, as it adds some type safety and integrates well with the symbol linking mechanism. There's one caveat though: If you try to define a constant like this inside a class:
class A{
public:
static const VALUE=5;
...
}; VC++ complains, even though this is perfectly legal C++. The standard workaround is to define VALUE as an enum:
class A{
public:
enum {VALUE=5};
...
};
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
|
|
|
|
|
Well this what I do when i define static values:
class A
{
static int VALUE;
};
and in the implementation file:
int A::VALUE = 5;
and it works!
Best regards,
Alexandru Savescu
|
|
|
|
|
Yes it works, but it has a drawback. A::VALUE , as so defined, cannot be used in constant expressions like this:
class A
{
public:
static int SIZE;
char array[SIZE];
}; The enum workaround does the trick, though.
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
|
|
|
|
|
This is From Thinking in C++ book
------------------------------------
Constants
In old (pre-Standard) C, if you wanted to make a constant, you had to use the preprocessor:
#define PI 3.14159
Everywhere you used PI, the value 3.14159 was substituted by the preprocessor
When you use the preprocessor to create constants, you place control of those constants outside the scope of the compiler. No type checking is performed on the name PI and you can’t take the address of PI (so you can’t pass a pointer or a reference to PI). PI cannot be a variable of a user-defined type. The meaning of PI lasts from the point it is defined to the end of the file; the preprocessor doesn’t recognize scoping.
C++ introduces the concept of a named constant that is just like a variable, except that its value cannot be changed. The modifier const tells the compiler that a name represents a constant. Any data type, built-in or user-defined, may be defined as const. If you define something as const and then attempt to modify it, the compiler will generate an error.
You must specify the type of a const, like this:
const int x = 10;
In Standard C and C++, you can use a named constant in an argument list, even if the argument it fills is a pointer or a reference (i.e., you can take the address of a const). A const has a scope, just like a regular variable, so you can “hide” a const inside a function and be sure that the name will not affect the rest of the program.
The const was taken from C++ and incorporated into Standard C, albeit quite differently. In C, the compiler treats a const just like a variable that has a special tag attached that says “Don’t change me.” When you define a const in C, the compiler creates storage for it, so if you define more than one const with the same name in two different files (or put the definition in a header file), the linker will generate error messages about conflicts. The intended use of const in C is quite different from its intended use in C++ (in short, it’s nicer in C++).
------------------------------------
anju
|
|
|
|
|
Hi,
In a CListBox drived class i have a simple task: firstly
write something such as "do some work begin ..." in a listbox.
and then do some work and with a progressbar for show the
process. but here my problem is i don't know why the "do some work begin"
always shown at the end of the progress ?
I really want to show it before the start of the progressbar.
Thanks in advance!
chen
|
|
|
|
|
Try to call listbox.Invalidate() and listbox.UpdateWindow() before performing long operation.
Tomasz Sowinski -- http://www.shooltz.com
** Putt knot yore thrust inn spel chequers. **
|
|
|
|
|
Hi,
Thanks for your reply!
It is worked by using UpdateWindow().
Another problem, how to make the listbox also shows the current added
strings?
Thanks again!
chen
|
|
|
|
|
I'm asssuming you're adding strings during lengthy operation. You should also UpdateWindow after each AddString.
Tomasz Sowinski -- http://www.shooltz.com
** Putt knot yore thrust inn spel chequers. **
|
|
|
|
|
But it is not worked due to the vertical scroolBar not at the end of the
ListBox. How to automated operate the vertical ScroolBar in order to show
the most recent added strings?
chen
|
|
|
|
|
Try with CListBox::SetTopIndex. If you pass the index of recently added item, the listbox should scroll to the end.
Tomasz Sowinski -- http://www.shooltz.com
To some its a six-pack, to me it's a support group
|
|
|
|
|
|
Hi,
I've developed an application which calls a VB dll.The problem that I have is that when a change is made in the VB dll I must recompile the whole VC++ project.
I would like to know how to call the VB dll without having to recompile the whole VC++ project each time a change is made in the dll.
This is how I call the VB dll:
HRESULT hresult;
CLSID clsid;
CoInitialize(NULL);
hresult= CLSIDFromProgID(OLESTR("dllTGT.Class1"),&clsid);
_Class1 *t;
hresult=CoCreateInstance(clsid,NULL,CLSCTX_INPROC_SERVER,__uuidof(_Class1),(LPVOID *) &t);
if(FAILED(hresult))
{AfxMessageBox("Creation Failed");
return;}
|
|
|
|
|
In VB project under the settings for component select Binary Compatibilty.
C# is fundamentally broken. - Christian Graus
|
|
|
|
|