|
raju.k wrote: in this code is not created the serial numbers in file
...
Lfile.Write("",b_Temp.GetLength());
Did you stop to wonder why?
If you went to pour the contents of an empty cup into the sink, would you then wonder why the sink remained dry?
"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
|
|
|
|
|
Hello everyone,
I want to learn what DLL rebase is, currently I am reading, http://msdn2.microsoft.com/en-us/library/ms810432.aspx, but find the theory part is too brief and I can not understand,
1. Why we need rebase;
2. When we need rebase;
3. How do the rebase;
4. Performance impact.
Any other documents to refer? From MSDN, this is the only one I found.
thanks in advance,
George
|
|
|
|
|
|
Thanks Steve!
Good link! What is A function imported by ordinal?
regards,
George
|
|
|
|
|
There are two ways to import a function from a DLL:
- By name.
- By ordinal.
When you import by ordinal the importing module refers to the function by index and not by name.
Steve
|
|
|
|
|
Thanks Steve!
1.
Stephen Hewitt wrote: refers to the function by index
By index? Looks interesting. Could you recommend some samples?
regards,
George
|
|
|
|
|
Try looking here[^] for a start.
Steve
|
|
|
|
|
Thanks Steve,
Good link and I read through it about how to use .DEF to make export by ordinal. But how to use (import) function by ordinal?
I have not found any materials covering it. Any ideas?
regards,
George
|
|
|
|
|
Nothing special needs to be done. Here's the def file of my DLL:
LIBRARY Dll.dll
EXPORTS
Exported @ 1 NONAME
Here's the DLL's header file which I include in the EXE and DLL.
#ifndef __DLL_H__INCLUDED__
#define __DLL_H__INCLUDED__
#ifdef __cplusplus
extern "C"
{
#endif // __cplusplus
void __stdcall Exported();
#ifdef __cplusplus
}
#endif // __cplusplus
#endif // !__DLL_H__INCLUDED__
In the EXE I link to the DLL's import library and call the function by name:
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
Exported();
return 0;
}
If you look at the EXE using Depends (or some other utility offering similar functionality) you'll see no function name is ever mentioned. The name information is in the DLL's import library so the linker can resolve it but it doesn't make it into the EXE or DLL.
Steve
|
|
|
|
|
Thanks Steve,
I have read your reply and sample again. Looks like from client (EXE which consumes the DLL) point of view, there is no differences for developer, still
1. invoke function by name;
2. link with import library.
From DLL developer's point of view, we only need to generate a .DEF file, right? This is the only difference?
regards,
George
|
|
|
|
|
Yeah, that's pretty much right when statically linking.
Steve
|
|
|
|
|
Hi Steve,
I am confused. Static linking? Static linking has nothing to do with DLL, just build a statuc lib and link with it. Also has nothing to do with refer by name or by ordinal.
Stephen Hewitt wrote: statically linking
regards,
George
|
|
|
|
|
There are two ways to use functions in a DLL:
1. Link to the import library of the DLL and the OS takes case of all the details. This is called static linking and is what the examples I've shown have been doing.
2. Link dynamically using LoadLibrary and GetProcAddress .
Steve
|
|
|
|
|
Thanks for your help, Steve!
I will try by myself how to use refer by ordinal technique. I think I only need to add a .DEF file to the DLL project and no need to change anything else in EXE project and DLL project.
regards,
George
|
|
|
|
|
Good day. I have a question about how to capture escape and enter key window message in Win32.
Normally in MFC, I will use PreTranslateMessage like below to capture enter and escape key...
BOOL CTestDlg::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->message == WM_KEYDOWN) {
if (pMsg->wParam==VK_ESCAPE || pMsg->wParam==VK_RETURN || pMsg->wParam==VK_CANCEL) {
return FALSE;
}
}
return CDialog::PreTranslateMessage(pMsg);
}
But somehow it seems that enter key and escape key cannot be captured in Win32 when I waiting for WM_KEYDOWN window message like below:
int CALLBACK TestDlgProc(HWND hDlg, UINT Message, WPARAM wParam, LPARAM lParam)
{
switch (Message) {
case WM_KEYDOWN:
switch (wParam) {
case VK_ESCAPE:
MessageBox(NULL, "VK_ESCAPE", "WM_KEYDOWN", MB_OK);
break;
case VK_RETURN:
MessageBox(NULL, "VK_RETURN", "WM_KEYDOWN", MB_OK);
break;
}
break;
}
}
Please help me. Is there anything I haven't done to make my code work?
|
|
|
|
|
I can suggest you 2 approach now,
1) use WM_COMMAND (wparam = IDOK for Enter key, and wparam = IDCANCEL for ESC key) and use different Dlg ID for OK and CANCEL key if your dialog has one.
2) in the main message loop put a route for your pretranslate function
while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
BOOL bTranslate = TRUE;
if (msg.hwnd is your dialog window)
{
bTranslate = pretranslate();
}
if (bTranslate)
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
I didn't tried please try and may us know
|
|
|
|
|
Hi,
You can also try SetWindowsHookEx API.
----
Catherine Sea
Dynamsoft Corporation
www.dynamsoft.com
the leading developer of version control and issue tracking software
|
|
|
|
|
Hello everyone,
Just wondering how COM implementation uses keyword interface without compile error, for a normal C++ project, if we use keyword interface, there will be compile error.
interface IFoo {
int func() = 0;
};
Compile error:
--------------------
d:\visual studio 2008\projects\test_virtual1\test_virtual1\main2.cpp(1) : error C2146: syntax error : missing ';' before identifier 'IFoo'
d:\visual studio 2008\projects\test_virtual1\test_virtual1\main2.cpp(1) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
d:\visual studio 2008\projects\test_virtual1\test_virtual1\main2.cpp(1) : error C2470: 'IFoo' : looks like a function definition, but there is no parameter list; skipping apparent body
--------------------
Any ideas?
thanks in advance,
George
|
|
|
|
|
The following can be found in the <basetyps.h> header:
#define interface struct
Steve
|
|
|
|
|
Thanks Steve,
My question is answered.
regards,
George
|
|
|
|
|
Hi,
I recently wrote a wrapper class around the WINAPI windowing system. This object creates a thread which calls GetMessage in a loop, as you do when creating a window. However, I soon noticed that as soon as I instantiated one of these windows, my processor meter would skyrocket and my system would slow down. I figured the canvas was the problem.
Just recently, I replaced the first line of my WinMain with "while(1);" and the same thing happens. So my program effectively reads
<br />
int WINAPI WinMain (HINSTANCE hThis, HINSTANCE hPrev, LPSTR lpszArg, int nCShow){<br />
while(1);<br />
return 0;<br />
}<br />
and it needs about 70% of the processor to do it. Can anybody explain what is going on here? Why should the scheduler be giving this process so much CPU time?
Thanks
-Greg
|
|
|
|
|
gpascale wrote: Why should the scheduler be giving this process so much CPU time?
Why shouldn't it? It's not the scheduler's job to say "that's a dumb process". It's the scheduler's job to give you as much time to do silly things in as it can. For all it knows, you're doing some really clever complex protein folding program to save mankind from the perils of cancer.
while (1);
may not cure cancer, but it doesn't go into any wait routines (like WaitForXEvent or GetMessage etc) to signal to the scheduler that you're done for the moment.
When you say you create a thread, do you mean the main thread, or a second one? And does GetMessage block, or fall straight out with an error message?
Iain.
|
|
|
|
|
Right. I get that.
The thing is that I would expect something like GetMessage() to do something more intelligent than spinlock while it waits for a message. Namely, I would expect it to go to sleep and be woken up when a message is sent. If this isn't the case, then how can you write a windowed application without using an absurd amount of CPU?
When I say create a thread, I mean my window class creates a thread whose job is to call GetMessage in a loop, so I can do other things in my main thread.
Thanks,
-Greg
|
|
|
|
|
...or are you using PeekMessage() instead of GetMessage() in your message loop...Bad
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Nope. PeekMessage doesn't block, does it? I definitely want to block.
|
|
|
|