D - Windows service sample
- Gifford Hesketh <Gifford_member pathlink.com> Feb 10 2004
- "Matthew" <matthew.hat stlsoft.dot.org> Feb 10 2004
- Gifford Hesketh <Gifford_member pathlink.com> Feb 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 ?
Feb 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
Linux daemons ?
Feb 10 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
Linux daemons ?
Feb 10 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
Linux daemons ?
Feb 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
Linux daemons ?
Feb 11 2004








Gifford.Hesketh <Gifford.Hesketh_member pathlink.com>