|
rowdy_vc++ wrote: This is the problem.
Indeed, since you have not shown any code that returns a value of 255.
"Normal is getting dressed in clothes that you buy for work and driving through traffic in a car that you are still paying for, in order to get to the job you need to pay for the clothes and the car and the house you leave vacant all day so you can afford to live in it." - Ellen Goodman
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
1. I have created a MFC single dialog based project
2. I have inserted Microsoft WebBrowser Control Activex
3. I am now able to open any web pages
But i can't suppress the javascript error. I have seen after inserting this activex control it has created a class CEXplorer1.
On VB i can set a property name suppressScript error but i can't find any property when i am using VC++ and MFC.
I am using visual studio 2005in windows XP with service pack 2 and have internet explorer 6.0
I have seen some tutorial they are saying i have to implement IOLECOMMANDTARGET::EXEC()
i want some simple solution if possible.
|
|
|
|
|
|
Hi,
I would like to use the RAS implementation in Win XP to make a dial up to my ISP and to establish the PPP link between my laptop and PDA phone.
I cannot use RASDial as the phone is not recognized by Win XP as a hardware connected even though the 2 devices are linked using Bluetooth.
I read that using RasCustomScriptExecute allows me to dial out through a specific com port. I would like to seek for assistance on some samples to get me started, as the MSDN examples are not enough for my understanding.
Thanks and regards,
PS
|
|
|
|
|
Hi,
Anyone know whether Open button in a MS office Open file dialog is a "BUTTON" or not. Why the spy++ is also not identifying it as a window? . And if it is a button it implements all button messages such as BN_CLICK etc.
thanks
Nitheesh
|
|
|
|
|
Hi,
I have a function in which I am passing to a character pointer (char *) by reference e.g. make_num(char *& str)
the first data variable I declare in my Function is a 255 byte character array e.g. char hold_area[255}
So my my code looks like this
Make_num(char *& str)
{
char hold_area[255]
When I refrence the address of the begining of thiis area e.g. &hold_area[0] it seems to be off by 4 bytes meaning when I look at the actual address in code hold_area[0 - 3] has some value maybe a pointer where my actual data starts in hold_area[4] ???
I prototype make_num( char *&); ???
A compiler glitch ???
thankx
|
|
|
|
|
ForNow wrote: Make_num(char *& str)
{
char hold_area[255]
How do you copy str to hold_area ?
Maxwell Chen
|
|
|
|
|
Its a = assignment e,g,
if ((char *) dtr >= 0x30 || (char) *str <= 0x39)
hold_area[i] = (char) *str
Hey just had a thought when I looked at the assembly code this data was referenced by the ESP reg
If I am calling by reference then there is no need to push to variable on the stack
maybe I should declare make_num with stdcall (I think ??) I am going to have to test this out
thankx
|
|
|
|
|
ForNow wrote: if ((char *) dtr >= 0x30 || (char) *str <= 0x39)
with bad casts like that, I wouldn't be surprised if a pointer gets
written to your char array
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Something must of happened when I cut and paste the code as I missed to * beforte str
However here is my code
{
if((char) *str >= 0x30 || (char) *str <= 39)
{
holdstr[i] = (char) *str;
i++;
}
}
holdstr[i] = NULL;
number = atoi((const char *)&holdstr[0]);
Is there any special calling method I need when calling by reference e.g stdcall/fastcall as it seems that the ESP reg is not pointing to where it should on entry
Thankx
|
|
|
|
|
hmmm....I'm not sure why you are expecting a certain esp value.
If there was a compiler bug with this, then I bet millions of apps
would be affected, and I, for one, couldn't trust local character arrays at all.
The implementor of the compiler is free to use the stack (or whatever other memory it wants to use)
for local variables in any way, as long as when we use the proper C++ syntax, we get access to the data
in a way the C++ specification states we should.
That aside, do you have a complete function example you can post along with
what you're seeing and what you're expecting to see with the esp register?
I'd be happy to look at it
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
This only happens... the bug in my release version of the the DLL when I run my debug thru VS its fine
Just so I understand the ESP or Stack pointer points to the Top of the Stack which has the paramters
to the functions afterwards are the Local Varibles of the Function
Global Variables are pointed to by the data segment register
(I am a Mainframe Assembler programmer by trade) knowing Assebmler or X6 Masm I guess helps especially when
There is a bug only in release version of the app as that seems to be the only way to see the values of the
Variables
Below is the Function.... This the fuction definition --> int make_num(char *&);
int make_num(char *& str)
{
char holdstr[255]; // allocate a large buffer
int i =0, number;
for (; *str != ','; str++)
{
if((char) *str >= 0x30 || (char) *str <= 39)
{
holdstr[i] = (char) *str;
i++;
}
}
holdstr[i] = NULL;
number = atoi((const char *)&holdstr[0]);
return number;
}
Thanks much
|
|
|
|
|
---> holdstr[i] = NULL; This is the culprit how come this statement didn't generate any MASM instructions ??
number = atoi((const char *)&holdstr[0]);
0037147D lea eax,[esp+4]
00371481 push eax
00371482 mov byte ptr [esp+esi+8],0
00371487 call dword ptr [__imp__atoi (37204Ch)]
|
|
|
|
|
Thanks!
The stack frame on entry to the function should look something like this
(after the stack frame is built, working downward in memory):
4 bytes: Passed reference argument (passed as a pointer probably)
4 bytes: Return address
256 bytes: local array
<--- esp points here
The compiler is free to align the local variables and add any integers
or whatever it needs for the stack frame, so to rely on a certain esp value
would require knowing exactly how the compiler builds the stack frame, which
will vary between compilers and compiler settings.
That aside, you found the culprit. I'm not sure why the code to add the null terminator
wouldn't be in the compiled code!
Maybe try this - add symbolic debug info to your release build configuration.
Then when you run it in the debugger you can still debug easy.
adding debug symbols to release builds[^]
Also for what it's worth, you can simplify this line:
number = atoi((const char *)&holdstr[0]);
to
number = atoi(holdstr);
I'll take a look at it here - please let me know what you find!
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Thankx so much right now debugging the release version
1)it seems that make_num is not returning a Value
I read that article regarding bugs in the release version of a application and... When I build a Release I also generate PDB('s) dont know the difference between the Debug and release Version of the excutables
I am Basically adding a DLL to a existing project
This is another issue but when I run the debug version of app it goes into a spin Loop so Debugging it I have used the rlease exe/DLL with PDB that VS created it seems that any Local symbol Symbols that require the Stack Frame
I have a hard time displaying using the release exe/dll(s) however using the Debug exe/dll I cann't get anywhere but this is a different issue
I am on the east coast and its 12:30 am here so I going to try to finish debugging this tommorow after work (work is MainFrame Stuff) really really appreciate your help
|
|
|
|
|
Also, what is the code used to export and inport the function?
C or C++ compiled?
Just to test with same configuration.
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
I'm in and out today setting up a show booth...
I had one quick note until I know your build configuration...
If you haven't already, make sure that the source string passed to the function
always has a comma ',' in it within 254 characters.
I passed a NULL terminated string to the function the first time I called it and
forgot to look at the loop termination logic I stopped it before it crashed but
single stepping through as it looped away wasn't good. As always that behavior is undefined.
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
The atoi function seems to be giving me all kinds of grief
number = atoi(holdstr);
0037147D lea eax,[esp+4]
00371481 push eax
00371482 mov byte ptr [esp+esi+8],0
00371487 call dword ptr [__imp__atoi (37204Ch)]
When I cut'n paste this code the breakpoint was sitting on push inst
As you can see from the register value of eax
EAX = 0012FB18 EBX = 00000000 ECX = 0012FC3C EDX = 00729BEE ESI = 00000003 EDI = 78144BA8 EIP = 00371481 ESP = 0012FB14 EBP = 0012FF10 EFL = 00000246
Is a valid character string representation of 300
0x0012FB18 33 30 30 01 c0 c4 4a e4 18 0d c2 e3 10 00 12 00 00 ab 2f a3 a0 ab 4e 80 ff ff ff ff 00 00 02 00 00 50 fd
When I step by the call to atoi
00371487 call dword ptr [__imp__atoi (37204Ch)]
return number;
}
0037148D mov ecx,dword ptr [esp+108h] <--- currently here
The EAX register has the value I want X'12C' = decimal 300 However it never gets moved to number
Does I need to use something Like setlocale to get atoi working
Thankx
EAX = 0000012C EBX = 00000000 ECX = 00000020 EDX = 00000005 ESI = 00000003 EDI = 78144BA8 EIP = 0037148D ESP = 0012FB10 EBP = 0012FF10 EFL = 00000206
|
|
|
|
|
Sorry
My debug and release configuration e.g compiler options linker option that I had changed while debugging
I didn't make those same changes in release
I still have problems
but I am further along
Thankx
|
|
|
|
|
I am trying to create shell context menu , I want to dispaly the path of file that on the right click of my menu item. Program displaying the path of file very well except the shortcut file path(.lnk file).
When I click on .lnk file, It display the target file path but I want shortcut file path, even this is also a file.
I asked this quetion before and someone suggest me the following:
"The shell resolves the links before calling 'InvokeCommand()', so you always will receive the link target."
But some also suggest me:
"You can register as a handler for .lnk files. If you don't do that, the shell with automatically follow the link and pass the target file to your extension."
I tried the above method but I could not get the .lnk file path. So could you please tell me how to get the .lnk file path using shell context menu.
|
|
|
|
|
If you give meaningful subject, you may get help quickly.
Like "Getting path to .lnk file" or else.
Best Regards,
Suman
|
|
|
|
|
I have asked this question many times with meaningful subject but nobody respond me.
|
|
|
|
|
They might not see your question who knows answer.
In that case, we cant bother anybody and we need to google or search in MSDN or look for some other way ourself..
I hope you will find solution soon
Best Regards,
Suman
|
|
|
|
|
pther wrote: I have asked this question many times with meaningful subject but nobody respond me.
Which could indicate to you that we may not know the answer. Continuing to ask the same question over and over will not change that.
"Normal is getting dressed in clothes that you buy for work and driving through traffic in a car that you are still paying for, in order to get to the job you need to pay for the clothes and the car and the house you leave vacant all day so you can afford to live in it." - Ellen Goodman
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
Suppose you register the extension handler under both * and .lnk as follows,
NoRemove lnkfile<br />
{<br />
NoRemove ShellEx<br />
{<br />
NoRemove ContextMenuHandlers<br />
{<br />
ForceRemove Myshell = s '{B3490870-0081-45C4-AE05-C4B7E788BC29}'<br />
}<br />
}<br />
}<br />
<br />
NoRemove *<br />
{<br />
NoRemove ShellEx<br />
{<br />
NoRemove ContextMenuHandlers<br />
{<br />
ForceRemove Myshell = s '{B3490870-0081-45C4-AE05-C4B7E788BC29}'<br />
}<br />
}<br />
}
The Initialize()function will be called twice. In the first call, it will passing target files name. But when it gets called for the second time, you will get the path of the lnk.
|
|
|
|