I wonder if somebody could remind me the method of defining a struct where you can set the bits of a member directly, without using the bitwise OR or bitshift operators. ie. I have a struct with 2 members
The offset member requires only 4 bits, and the repaint only 1. Idealy they could be combined so that the Repaint member uses the high order bit of the same BYTE. I remember seeing a way to do this, possibly using a union, but I cannot remember how or where I saw it.
This is mirroring a register in some hardware I talk to. I can set the variable by twiddling individual bits: ChannelsOn.Bits.MasterOn = 1<code>, and also use it as a whole byte... <code>SendStuffToHardware (...., ChannelsOn.Mask, ....);
So, while its not a linked language construct, it's often handy.
Unions can also be usedto ensure the overall variable ends up the correct size.
I am having trouble understanding what it is your trying to accomplish, however I believe you want to manipulate the bits in these bytes indirectly without accessing struct members, although I can't imagine why you would want to do this. Perhaps you have a high performance application and are attempting to shave off a few operations in a critical function.
If speed is your goal, then you should work with the fastest datatype on a 32 bit operating system, sizeof(int). On a modern Intel Core 2 Duo the following function is the fastest, you should define bit masks in your application. The function does not generate any branching op codes, quite fast.
unsigned int bitset(unsigned int bits,unsigned int mask,bool flag)
bits = (bits & ~mask) | (-flag & mask);
I am Using RegEnumValue() to Obtain the Names of the Values in the Specified Registry. But Its Not Working correctly. I dont know where I am doing the mistake. According to me the code is perfectly OK. But see if u can Find any Bug and can HELP me.
When I debug the Following in Code it just Show me the Last Value Name int he Registry MyApplication while there is eight Values. I get Other Values as Empty String.(String Values).
The 4th parameter to RegEnumValue() ?
lpcValueName [in/out] should be the size of the buffer before the call, after the call its the number of characters returned, being in a for loop you should be setting that before the call everytime.
I am writting register part of my software. When user enter the right register code, I want to modify some Bytes in the a.exe file's to remember this. And it means I need write some bytes to the a.exe file when it is running.
You first need to reserve space in the EXE for this, and be able to locate it code-wise, either by offset or by special signature bytes (I presume you have already done this).
I do not believe that you can modify the EXE file while it is mapped into memory (i.e. running). You should have read-only access to the EXE file, so your executable can make a copy of itself and launch that copy passing it a special command line parameter (which means run, do not copy yourself) so that it does the real launching. I think you can then mark that copy-of-yourself with the Delete On Close flag, so that it cleans itself up when it exits. The process would work like this:
1: When launched, check for the run, do not copy yourself parameter
2a: If found, the application runs normally
2b: If not found, copy yourself (the EXE file) to a temporary location
3: Launch the temporary copy passing the run, do not copy yourself parameter
4: Flag the temporary copy for delete-on-close (lookup the FILE_FLAG_DELETE_ON_CLOSE flag)
Once you do this, your application's copy can modify the original EXE on disk, and whatever you change will have an effect the next time it is started.
This is also a way to handle automatic updates without a satellite or worker/helper application handling the replacing of files that are in use.
Be sure to give the temporary copy a meaningful filename, and document it, so that users do not worry when they see an unknown executable filename in Task Manager.
-=- 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