|
abrakadbra wrote: thanks...but can you pls tell me more detail as change in my code...sorry but i am very much confused
Hai Mr. Jadugar,
you can use Much Better class _bstr_t which is wrapper over BSTR and provide mechanism for LPCTSTR too!
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow
cheers,
Alok Gupta
VC Forum Q&A :- I/ IV
Support CRY- Child Relief and you
|
|
|
|
|
I am attempting to write a screen saver. however, even in the earliest stage, I'm having issues.
I have linked the scrnsave.lib, and added the required functions. Yet, I continue to get the following error:
1>scrnsave.lib(scrnsave.obj) : error LNK2019: unresolved external symbol _ScreenSaverProc@16 referenced in function _RealScreenSaverProc@16
#include <windows.h><br />
#include <scrnsave.h><br />
<br />
void InitGL(HWND hWnd, HDC &hDC, HGLRC &hRC);<br />
void CloseGL(HWND hWnd, HDC hDC, HGLRC hRC);<br />
int Width; <br />
int Height;<br />
<br />
#define TIMER 1 <br />
<br />
LRESULT WINAPI ScreenSaverProc(HWND hWnd, UINT message, <br />
WPARAM wParam, LPARAM lParam)<br />
{<br />
static HDC hDC;<br />
static HGLRC hRC;<br />
static RECT rect;<br />
<br />
switch ( message ) {<br />
<br />
case WM_CREATE: <br />
GetClientRect( hWnd, &rect );<br />
Width = rect.right; <br />
Height = rect.bottom;<br />
<br />
<br />
InitGL( hWnd, hDC, hRC );<br />
<br />
<br />
SetTimer( hWnd, TIMER, 10, NULL ); <br />
return 0;<br />
<br />
case WM_DESTROY:<br />
KillTimer( hWnd, TIMER );<br />
<br />
<br />
CloseGL( hWnd, hDC, hRC );<br />
return 0;<br />
<br />
case WM_TIMER:<br />
return 0; <br />
<br />
}<br />
<br />
<br />
return DefScreenSaverProc( <br />
hWnd, message, wParam, lParam );<br />
}<br />
<br />
static void InitGL(HWND hWnd, HDC & hDC, HGLRC & hRC)<br />
{<br />
<br />
PIXELFORMATDESCRIPTOR pfd;<br />
ZeroMemory( &pfd, sizeof( pfd) );<br />
pfd.nSize = sizeof( pfd);<br />
pfd.nVersion = 1;<br />
pfd.dwFlags = PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;<br />
pfd.iPixelType = PFD_TYPE_RGBA;<br />
pfd.cColorBits = 24;<br />
<br />
hDC = GetDC( hWnd );<br />
<br />
int i = ChoosePixelFormat( hDC, &pfd ); <br />
SetPixelFormat( hDC, i, &pfd );<br />
<br />
hRC = wglCreateContext( hDC );<br />
wglMakeCurrent( hDC, hRC );<br />
<br />
}<br />
<br />
static void CloseGL(HWND hWnd, HDC hDC, HGLRC hRC)<br />
{<br />
wglMakeCurrent( NULL, NULL );<br />
wglDeleteContext( hRC );<br />
ReleaseDC( hWnd, hDC );<br />
}<br />
<br />
BOOL WINAPI<br />
ScreenSaverConfigureDialog(HWND hDlg, UINT message, <br />
WPARAM wParam, LPARAM lParam)<br />
{<br />
return FALSE;<br />
}<br />
<br />
BOOL WINAPI RegisterDialogClasses(HANDLE hInst)<br />
{<br />
return TRUE;<br />
}
I've been stuck here for a while, so any help you can offer would be greatly appriciated. Also, not sure if this was the best forum for this post...If not, please advise, and I will correct.
Thank you.
|
|
|
|
|
You need to export your ScreenSaverProc function so scrnsave.lib can link to it...
See the "Creating a module-definition file" section in Handling Screen Savers[^]
Mark
|
|
|
|
|
Thank you Mark, I'm sure that is the problem. However, when I export the two functions, I get the following:
1>LINK : error LNK2001: unresolved external symbol ScreenSaverProc
So, again, I'm at a loss.
|
|
|
|
|
Did you export using a def file? If so, you may need to add the def file to your project's linker
options (option "Linker | Input | Module Definition File" on VS2003).
Mark
|
|
|
|
|
I attempted using def file (and it was linked) and using /EXPORT. Both gave me the same reply.
ps. using VS2005
|
|
|
|
|
Hmmm should have linked
What about declaring the ScreenSaverProc like this:
__declspec( dllexport ) LRESULT WINAPI ScreenSaverProc(HWND hWnd, UINT message,
WPARAM wParam, LPARAM lParam);
|
|
|
|
|
You probably know this, but the docs state:
"The ScreenSaverProc function must be exported by including it in the EXPORTS statement in the application's module-definition (.def) file."
Are you sure the linker was using your def file? There should be a /DEF:myapp.def entry for the
liker command line.
|
|
|
|
|
/DEF:screensaver.def is in the linker command line. But got the same error.
Attempted __declspec( dllexport )LRESULT WINAPI ScreenSaverProc(HWND hWnd, UINT message,
WPARAM wParam, LPARAM lParam)
and got the following error:
1>c:\documents and settings\devin\my documents\visual studio 2005\projects\screen saver 3\screen saver 3\screen saver.cpp(16) : error C2375: 'ScreenSaverProcW' : redefinition; different linkage
Aside from it being so frustrating to get stuck so early on in a project, its almost commical
|
|
|
|
|
nineofhearts00 wrote: ScreenSaverProcW
There's a clue! The docs don't mention a Unicode ScreenSaverProc!
Try changing the screensaverproc name to ScreenSaverProcA (ANSI) or ScreenSaverProcW (Unicode)
and exporting as the new name.
nineofhearts00 wrote: side from it being so frustrating to get stuck so early on in a project, its almost commical
No kidding! This should be a simple one!
|
|
|
|
|
OK actually it's "documented" in scrnsave.h
I suppose your function name can stay the same but you'll need to export it with the W for unicode
(no A for ANSI though!)
*EDIT* From scrnsave.h
#ifdef UNICODE
LRESULT WINAPI ScreenSaverProcW (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
# define ScreenSaverProc ScreenSaverProcW
#else
LRESULT WINAPI ScreenSaverProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
#endif
|
|
|
|
|
Even funnier...
Changed the Export to ScreenSaverProcW and ended up with the original errors:
1>scrnsave.lib(scrnsave.obj) : error LNK2019: unresolved external symbol _ScreenSaverProc@16 referenced in function _RealScreenSaverProc@16
1>scrnsave.lib(scrnsave.obj) : error LNK2019: unresolved external symbol __imp__InitCommonControlsEx@4 referenced in function _WinMainN@16
Believe it or not, I have started from scratch on this a few times already, just to make sure I haven't missed anything. I think at this point I have read everything online about screen savers.
|
|
|
|
|
I just built an app and got the same error.
As soon as I added scrnsave.lib to the project linker/input/additional Dependencies setting the
error went away.
|
|
|
|
|
I have it linked. I swear.
Since it has worked for you, i'm going to list everything i did and see if anything sticks out to you. (and thank you again for all your time)
1. new win32 console app (made it empty)
2. new cpp file containing all the functions you've seen.
3. add scrnsave.lib to linker input additional dependancies
4. new resourse def file. added EXPORTS for both the functions
5. added the IDS_DESCRIPTION=1 to the string table
I think that is it. 5 little steps and i still can't get it right lol
|
|
|
|
|
nineofhearts00 wrote: 1. new win32 console app (made it empty)
No Bueno. Should be a Win32 GUI app.
Mine linked with no exports or def file.
Here's what's in my stdafx.h precompiled header:
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
#include <windows.h>
#include <stdlib.h>
#include <malloc.h>
#include <memory.h>
#include <tchar.h>
#include <scrnsave.h>
A console app is going to compile different because WIN32 and _WINDOWS need to be defined.
|
|
|
|
|
By the way I had to add comctl32.lib in my project to link with InitCommonControlsEx.
|
|
|
|
|
and add comctl32.lib for the other unresolved (InitCommonControlsEx)
|
|
|
|
|
had that, but had removed it when i was trying to find an answer...but thanks.
|
|
|
|
|
On the plus side, that's only 24 hours of your life you'll never get back
|
|
|
|
|
Somebody would help me how could I access a memory cell? For example, I want to access the memory 0x009200,(read and write the memory).what should I do?
Thanks.Eager for your help!
|
|
|
|
|
What do you mean by a 'memory cell' ? Why do you want to access a specific location ?
If you knew that 0x009200 contained valid memory, you could do this:
char * mem = 0x009200;
But, it's a dangerous road. Where's the number coming from, that you know the number, but don't have a pointer that points to it already ?
Christian Graus - Microsoft MVP - C++
Metal Musings - Rex and my new metal blog
|
|
|
|
|
this number only a example.and all the thing is another person asking for me.
But what u tell me couldn't work.the program will terminate when i what to display the char stored in mem.
Thanks for your replay
best regards.
|
|
|
|
|
kcynic wrote: But what u tell me couldn't work
Wrong.
kcynic wrote: the program will terminate when i what to display the char stored in mem.
Because, like I said, if you just start making up memory addresses, odds are that you won't own them, and you'll crash your program.
So, I ask again, why would you want to grab a memory address that you don't already have a pointer to, and try to work with it ?
Christian Graus - Microsoft MVP - C++
Metal Musings - Rex and my new metal blog
|
|
|
|
|
There is no point in accessing a specific address if you're not in kernel mode, or outside the scope of a memory protected operating system. Most, if not all, use something called "paging". The paging mechanisms map virtual addresses to physical addresses. The virtual address 0x0010000 might not (most likely won't) point to the physical address 0x0010000. In fact, you can't be sure what physical address the virtual address is mapped to, as it may vary at runtime at any time (pages being swapped in and out).
If you're running an application (i.e., not in kernel mode) in Windows, Linux, or any other modern operating system, you can stop your quest right now. It is a fruitless quest.
--
Not a substitute for human interaction
|
|
|
|
|
Is it possible to add multiple views to one document? I would like to display both views at the same time. In the CDocument class there is a function call AddView but that only seems to give me an ASSERT error when I try.
Is there something simple I am missing or is this even possible?
thanks,
Mike
|
|
|
|