|
I just switched from a debug build to a release build using my fairly new VC8 compiler, when I was confronted with many warnings I never expected. Most of these warnings relate to my using C type casts (at least I think, I didn't fix them all yet). One warning in particular I am unable to correct:
_stprintf_s(buf,255,_T("SYNTHETIC:%8.8X"), reinterpret_cast<DWORD>(this));
Which gives me a pointer truncation error. I know it is safe to ignore, but in my view warnings are there to tell you you something, in this case "Hey lamer, code this better!!!".
Also, since these are warnings and not errors, the compiler tends to not repeat the warning on further rebuilds. How can I change this? If I remember in VC6 I had to toggle the "incremental rebuild" option, but I have so far been unable to find it in VC8.
And, one last question, how can I view the same warnings when doing a debug build?
-- modified at 3:06 Wednesday 22nd November, 2006
|
|
|
|
|
The problems was due to the "64 bit compatibility check" option being set in the options for release builds. Disabling the option has resolved the problems, however it does lead me to another question.
Does anybody know of any decent articles about creating 64 bit compatible applications?
|
|
|
|
|
The big thing, which you just ran into, is casting pointers to a 32-bit type such as DWORD . You should use DWORD_PTR instead. The _PTR doesn't mean "pointer" (it's a bad choice of name IMO but we're stuck with it), it means "same size as a pointer" - so 32 bits in x86 and 64 bits in x64.
|
|
|
|
|
Michael Dunn wrote: The big thing, which you just ran into, is casting pointers to a 32-bit type such as DWORD. You should use DWORD_PTR instead. The _PTR doesn't mean "pointer" (it's a bad choice of name IMO but we're stuck with it), it means "same size as a pointer" - so 32 bits in x86 and 64 bits in x64.
Thanks for the heads up. I was always under the assumption that the *_PTR DID mean "pointer". My own fault for not checking the docs, but with a name like that what is to be expected!
What is it with MS and their typecasts?
|
|
|
|
|
hi all i had created the bitmap of whole screen through code,i mean functiosn such as createcompatiblebitmap(),bitblt() etc and then save it works fine
now i want that that size of image(i mean widht and height) should be reduced,so that whole screen fits into small bitmap,i had tried using stretchblt() but it did not work bcos it creates image of same size. i mean reduced image + some black parts also present on image which i dont want.
how to remove those black parts from image.so that color values are present and no black parts where i reduced the widht height.
Tasleem Arif
|
|
|
|
|
stretchblt() is the function you need, it shouldn't be painting any black rectangles to your bitmap, so I can only guess you are using it wrong. Perhaps you could show the code sample you are using and we may be able to help you find the errors.
|
|
|
|
|
thanks for replay here is the code of its behind the button event,
<br />
int nScreenWidth =:: GetSystemMetrics(SM_CXSCREEN);<br />
int nScreenHeight =:: GetSystemMetrics(SM_CYSCREEN);<br />
HWND hDesktopWnd = ::GetDesktopWindow();<br />
HDC hDesktopDC = ::GetDC(hDesktopWnd);<br />
HDC hCaptureDC =:: CreateCompatibleDC(hDesktopDC);<br />
HBITMAP hCaptureBitmap=::CreateCompatibleBitmap(hDesktopDC, nScreenWidth, nScreenHeight);<br />
::SelectObject(hCaptureDC,hCaptureBitmap); <br />
StretchBlt(hCaptureDC,0,0,((nScreenWidth/2)+310),((nScreenHeight/2)+290),hDesktopDC,0,0,nScreenWidth,nScreenHeight,SRCCOPY);<br />
CImage file; <br />
char str[15];<br />
DWORD filetime=::timeGetTime();<br />
itoa(filetime,str,10);<br />
strcat(str,".png");<br />
char strdrive[25]="C:\\";<br />
strcat(strdrive,str);<br />
file.Attach(hCaptureBitmap);<br />
file.Save(strdrive);<br />
hope it clears my question.
Tasleem Arif
|
|
|
|
|
Dear All,
I am working on MSXML. Here I need to do is that converting regitrykey s into XML tags.
Here I have mostly done with keys and tags.
My problem is I cant maintain the control like tree structure on XML file?
I need a logic to do this.
Kindly help me.
Thanks
-- modified at 1:34 Wednesday 22nd November, 2006
|
|
|
|
|
Hi,
XML, HTML, XHTML, etc... are all tree structure based languages, so there's no way to provent you from maintaining tree structure in XML file. Use attributes (eg. Id, parentId) to obtain such functionality.
...
mom
..|-node0 (parent=mom)
....|-node1 (parent=node0)
....|-node2 (parent=node0)
...
Hope that helps,
Regards
-- modified at 4:39 Wednesday 22nd November, 2006
|
|
|
|
|
I try to use 'KBDLLHOOKSTRUCT' and I get the error undeclared identifier.
When I compile the ForTheKids, it is alright!
Please help!
|
|
|
|
|
Is that a console project? If so have you included the header file "Windows.h"?
Nobody can give you wiser advice than yourself. - Cicero
|
|
|
|
|
It is a mfc dialog project!
Both windows.h and winuser.h are included!
Please help!
|
|
|
|
|
Is there any other error you get? Is that you are using ULONG_PTR as it is? Is that defined? If not, try defining ULONG_PTR as #define ULONG_PTR ULONG* in your stdafx.h
Nobody can give you wiser advice than yourself. - Cicero
|
|
|
|
|
I don't get any other error!
Please help!
|
|
|
|
|
_WIN32_WINNT=0x0401
Set this macro in the project setting->C++->Preprocessor definition
|
|
|
|
|
I think, you need to download latest platform SDK.
|
|
|
|
|
But I can comply the ForTheKid program without any error!
Is it related to any setting problem?
Please help!
|
|
|
|
|
|
Hi all,
I wrote a program that checks whether another process of the same kind is running, and it's working. But my question is will the same program work, if two different computer(user) sessions are open and the they try to open an application (which I have cattered for) more than once.
An example I can give is the following: A user can use remote desktop to login and another user can use VNC which creates more than one user session. The two users do not know of one another and they decide to open an application. But only one session of this application may be opened. Is it possible to check for both of the sessions, to prevent the program from being opened more than one.
Many thanx
The only programmers that are better than C programmers are those who code in 1's and 0's.....
Programm3r
|
|
|
|
|
Hi,
You can use Mutex or Semaphore in global namespace. Global objects are visible in all sessions.
Example:
HANDLE hSemaphore = NULL;
LPCTSTR pGlobalName = _T("Global\\MyInstance_938759");
hSemaphore = OpenSemaphore(SEMAPHORE_ALL_ACCESS, FALSE, pGlobalName);
if (!hSemaphore) {
hSemaphore = CreateSemaphore(NULL, 0, 2, pGlobalName);
} else {
return 0;
} Hope that helps
Regards
|
|
|
|
|
Thank you very much Galatei
The only programmers that are better than C programmers are those who code in 1's and 0's.....
Programm3r
|
|
|
|
|
How about ALWAYS trying to create, instead of open and THEN create.
You leave a small window of opportunity for your thread to be switched out, and then you try the create, and it can fail, and you are not chekcing for that failure (error already exists...).
If you always try create in the first place, you can get back 'error alrady exists', and you know that you are already there, or else you ae the first one.
Your exmaple is generally acceptable, but not technically correct.
|
|
|
|
|
In my example, you can use Opened semaphore for IPC.
Generally, creating to fail and then checking is not correct, it may be cause of serious problems.
If you try to create file which should be reported as existing, but it wasn't reported because of some disk I/O failure, you may end up scratching your desk with your teeths.
It's like this
"go shopping, get new MP3 player, go to the cash-desk, and finally find out that you don't have enough money." <- How about checking your wallet before you even leave your home?
Regards
|
|
|
|
|
Correct, in all accounts, except we were not talking about creating a file, we were creating a sempahore WHICH you were going to create anwyays.
On a fairly loaded terminal services server, I have ALREADy seen code like yours fail. For exactly the reasons I mentioned.
|
|
|
|
|
You mean BADLY implemented apps, sure.
My implementation wouldn't fail, because of error checking on every important step!
So, if OpenSemaphore is NOT_EXISTS, and CreateSemaphore return EXISTS, I still have correct information.
Implementation like yours is like M$ way of security. Always trying to harm first, hoping that its security system will prevent from that.
You should learn from linux implementation (check first, and act if it is possible).
Regards
|
|
|
|
|