Confused about use of 'HANDLE' in piece of Visual C++ code for Real-Time IIS 7.0 Event Logging
I'm relatively new to Visual C++. 开发者_JAVA技巧I'm trying to build a module to consume log events generated by the IIS 7.0 server in order to be able to analyze these logs in real-time. I found a Microsoft article which provides code that accomplishes the real-time capture:
http://learn.iis.net/page.aspx/581/advanced-logging-for-iis-70---real-time-logging#module
After some work, I've gotten this code to compile into a DLL on my machine (64-bit Windows XP with Visual Studio .NET 2008). I'm curious about the double initiation (?) of the m_hEventLog 'event viewer'. I've reproduced the constructor and the line in the private section which both seem to create a handle to the event viewer.
The constructor:
MyGlobalModule()
{
m_hEventLog = RegisterEventSource( NULL, L"IISADMIN" );
}
private:
HANDLE m_hEventLog;
My question: Why does m_hEventLog need to be declared twice?
Thanks in advance,
-Eric
This line:
private:
HANDLE m_hEventLog;
is declaration of the variable m_hEventLog
. It means that when an object of type MyGlobalModule
will be declared, that will contain a member named m_hEventLog
. When the object is declared, or in other words, constructed, the constructor is called. It executes the following line:
m_hEventLog = RegisterEventSource( NULL, L"IISADMIN" );
The this line will execute, RegisterEventSource()
will be called and its return value will be assigned to m_hEventLog
.
EDIT
Consider the following program:
class A
{
public:
A() : a(0) {}
int get_a() const {return a;}
void set_a(int na) {a = na;}
private:
int a;
};
int main()
{
return 0;
}
When this program is executed, nothing actually happens for class A
because there is no variable declared defined of type A. If the main()
function is written in this way:
int main()
{
A a;
return 0;
}
then an object of type A
is declared defined (provided that compiler didn't optimize anything). It hold an integer inside it (the member variable a
). A
's constructor will be called so that A
is initialized. And the constructor will initialize A
's a
to 0. Note I used initializer list to initialize A::a
.
精彩评论