Thread overview
Windows service sample
Feb 10, 2004
Gifford Hesketh
Feb 10, 2004
Matthew
Feb 11, 2004
Gifford Hesketh
Feb 11, 2004
Gifford.Hesketh
Feb 11, 2004
Gifford.Hesketh
February 10, 2004
I have not seen one, so I thought I would ask:  Are there samples in D of implementing Windows services (with ServiceMain et al.) -- or, for that matter, Linux daemons ?


February 10, 2004
Not yet. That'd be good to do though. Are you offering?

:)


"Gifford Hesketh" <Gifford_member@pathlink.com> wrote in message news:c0an69$133s$1@digitaldaemon.com...
> I have not seen one, so I thought I would ask:  Are there samples in D of implementing Windows services (with ServiceMain et al.) -- or, for that
matter,
> Linux daemons ?
>
>


February 11, 2004
I guess I will give it a whirl.

In article <c0bili$2fqe$1@digitaldaemon.com>, Matthew says...
>
>Not yet. That'd be good to do though. Are you offering?
>
>:)
>
>
>"Gifford Hesketh" <Gifford_member@pathlink.com> wrote in message news:c0an69$133s$1@digitaldaemon.com...
>> I have not seen one, so I thought I would ask:  Are there samples in D of implementing Windows services (with ServiceMain et al.) -- or, for that
>matter,
>> Linux daemons ?
>>
>>
>
>


February 11, 2004
Help !

I have a problem porting this part of WinSvc.h:

<code>

//
// Function Prototype for the Service Main Function
//

typedef VOID (WINAPI *LPSERVICE_MAIN_FUNCTIONW)(
DWORD   dwNumServicesArgs,
LPWSTR  *lpServiceArgVectors
);

typedef VOID (WINAPI *LPSERVICE_MAIN_FUNCTIONA)(
DWORD   dwNumServicesArgs,
LPSTR   *lpServiceArgVectors
);

#ifdef UNICODE
#define LPSERVICE_MAIN_FUNCTION LPSERVICE_MAIN_FUNCTIONW
#else
#define LPSERVICE_MAIN_FUNCTION LPSERVICE_MAIN_FUNCTIONA
#endif //UNICODE

//
// Service Start Table
//

typedef struct _SERVICE_TABLE_ENTRYA {
LPSTR                       lpServiceName;
LPSERVICE_MAIN_FUNCTIONA    lpServiceProc;
}SERVICE_TABLE_ENTRYA, *LPSERVICE_TABLE_ENTRYA;
typedef struct _SERVICE_TABLE_ENTRYW {
LPWSTR                      lpServiceName;
LPSERVICE_MAIN_FUNCTIONW    lpServiceProc;
}SERVICE_TABLE_ENTRYW, *LPSERVICE_TABLE_ENTRYW;
#ifdef UNICODE
typedef SERVICE_TABLE_ENTRYW SERVICE_TABLE_ENTRY;
typedef LPSERVICE_TABLE_ENTRYW LPSERVICE_TABLE_ENTRY;
#else
typedef SERVICE_TABLE_ENTRYA SERVICE_TABLE_ENTRY;
typedef LPSERVICE_TABLE_ENTRYA LPSERVICE_TABLE_ENTRY;
#endif // UNICODE

</code>

Getting rid of the ASCII/UNICODE distinction and converting to D would seem to yield this (please excuse my white-space conventions):

<code>

export extern ( Windows )
{

void (* LPSERVICE_MAIN_FUNCTION)
(
uint dwNumServicesArgs,
char * * lpServiceArgVectors
);

struct SERVICE_TABLE_ENTRY
{
char * lpServiceName;
LPSERVICE_MAIN_FUNCTION lpServiceProc;
}

alias SERVICE_TABLE_ENTRY * LPSERVICE_TABLE_ENTRY;

} // export

</code>

The problem is that the member of type LPSERVICE_MAIN_FUNCTION in the struct SERVICE_TABLE_ENTRY crashes dmd.  The rest of my winsvc.d is complete.

I saw that Pavel Minayev's windows.d has:

<code>
extern(Windows) alias void (*LPSERVICE_MAIN_FUNCTION)(DWORD);
</code>

but I do not think that is going to work for me.

Can anyone shed some light here ?


In article <c0c8qq$jhn$1@digitaldaemon.com>, Gifford Hesketh says...
>
>I guess I will give it a whirl.
>
>In article <c0bili$2fqe$1@digitaldaemon.com>, Matthew says...
>>
>>Not yet. That'd be good to do though. Are you offering?
>>
>>:)
>>
>>
>>"Gifford Hesketh" <Gifford_member@pathlink.com> wrote in message news:c0an69$133s$1@digitaldaemon.com...
>>> I have not seen one, so I thought I would ask:  Are there samples in D of implementing Windows services (with ServiceMain et al.) -- or, for that
>>matter,
>>> Linux daemons ?


February 11, 2004
I guess this is what I need to do:

<code>

alias void (* LPSERVICE_MAIN_FUNCTION)
(
uint dwNumServicesArgs,
char * * lpServiceArgVectors
);

struct SERVICE_TABLE_ENTRY
{
char * lpServiceName;
LPSERVICE_MAIN_FUNCTION lpServiceProc;
}

alias SERVICE_TABLE_ENTRY * LPSERVICE_TABLE_ENTRY;

</code>

In article <c0e8bs$102b$1@digitaldaemon.com>, Gifford.Hesketh says...
>
>Help !
>
>I have a problem porting this part of WinSvc.h:
>
><code>
>
>//
>// Function Prototype for the Service Main Function
>//
>
>typedef VOID (WINAPI *LPSERVICE_MAIN_FUNCTIONW)(
>DWORD   dwNumServicesArgs,
>LPWSTR  *lpServiceArgVectors
>);
>
>typedef VOID (WINAPI *LPSERVICE_MAIN_FUNCTIONA)(
>DWORD   dwNumServicesArgs,
>LPSTR   *lpServiceArgVectors
>);
>
>#ifdef UNICODE
>#define LPSERVICE_MAIN_FUNCTION LPSERVICE_MAIN_FUNCTIONW
>#else
>#define LPSERVICE_MAIN_FUNCTION LPSERVICE_MAIN_FUNCTIONA
>#endif //UNICODE
>
>//
>// Service Start Table
>//
>
>typedef struct _SERVICE_TABLE_ENTRYA {
>LPSTR                       lpServiceName;
>LPSERVICE_MAIN_FUNCTIONA    lpServiceProc;
>}SERVICE_TABLE_ENTRYA, *LPSERVICE_TABLE_ENTRYA;
>typedef struct _SERVICE_TABLE_ENTRYW {
>LPWSTR                      lpServiceName;
>LPSERVICE_MAIN_FUNCTIONW    lpServiceProc;
>}SERVICE_TABLE_ENTRYW, *LPSERVICE_TABLE_ENTRYW;
>#ifdef UNICODE
>typedef SERVICE_TABLE_ENTRYW SERVICE_TABLE_ENTRY;
>typedef LPSERVICE_TABLE_ENTRYW LPSERVICE_TABLE_ENTRY;
>#else
>typedef SERVICE_TABLE_ENTRYA SERVICE_TABLE_ENTRY;
>typedef LPSERVICE_TABLE_ENTRYA LPSERVICE_TABLE_ENTRY;
>#endif // UNICODE
>
></code>
>
>Getting rid of the ASCII/UNICODE distinction and converting to D would seem to yield this (please excuse my white-space conventions):
>
><code>
>
>export extern ( Windows )
>{
>
>void (* LPSERVICE_MAIN_FUNCTION)
>(
>uint dwNumServicesArgs,
>char * * lpServiceArgVectors
>);
>
>struct SERVICE_TABLE_ENTRY
>{
>char * lpServiceName;
>LPSERVICE_MAIN_FUNCTION lpServiceProc;
>}
>
>alias SERVICE_TABLE_ENTRY * LPSERVICE_TABLE_ENTRY;
>
>} // export
>
></code>
>
>The problem is that the member of type LPSERVICE_MAIN_FUNCTION in the struct SERVICE_TABLE_ENTRY crashes dmd.  The rest of my winsvc.d is complete.
>
>I saw that Pavel Minayev's windows.d has:
>
><code>
>extern(Windows) alias void (*LPSERVICE_MAIN_FUNCTION)(DWORD);
></code>
>
>but I do not think that is going to work for me.
>
>Can anyone shed some light here ?
>
>
>In article <c0c8qq$jhn$1@digitaldaemon.com>, Gifford Hesketh says...
>>
>>I guess I will give it a whirl.
>>
>>In article <c0bili$2fqe$1@digitaldaemon.com>, Matthew says...
>>>
>>>Not yet. That'd be good to do though. Are you offering?
>>>
>>>:)
>>>
>>>
>>>"Gifford Hesketh" <Gifford_member@pathlink.com> wrote in message news:c0an69$133s$1@digitaldaemon.com...
>>>> I have not seen one, so I thought I would ask:  Are there samples in D of implementing Windows services (with ServiceMain et al.) -- or, for that
>>>matter,
>>>> Linux daemons ?
>
>