开发者

Confused about use of 'HANDLE' in piece of Visual C++ code for Real-Time IIS 7.0 Event Logging

开发者 https://www.devze.com 2023-01-19 18:47 出处:网络
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 Mi

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.

0

精彩评论

暂无评论...
验证码 换一张
取 消