SERVICE_TABLE_ENTRY - Incorrect character format for the name of the service...?
Hi all,
I'm sure this has been asked before, but what answers I found via search-engine research either weren't clear or didn't help...
I'm writing the SERVICE_TABLE_ENTRY portion of a Windows Service in WinAPI and C++
Code:
SERVICE_TABLE_ENTRY service[] =
{
{serviceName, (LPSERVICE_MAIN_FUNCTION)ServiceMain},
{NULL, NULL}
};
However, the 'serviceName' variable consistently reports the following error:
Quote:
'const wchar_t*' cannot be used to initialize variable of type 'LPWSTR'
.
How can I create a variable that is interpreted correctly without the above error?
I've tried:
Code:
LPWSTR serviceName = TEXT("name")
but that also errors...
Re: SERVICE_TABLE_ENTRY - Incorrect character format for the name of the service...?
The issue is the const. Try casting serviceName to LPWSTR when used to initialise the array.
PS. The statement
Code:
LPWSTR serviceName = TEXT("name")
actually has serviceName as type LPCWSTR and not LPWSTR as specified. The reason is that serviceName is initialised as a 'pointer to wchar_t' with a string literal - which is a const - c++ now treats initialisation of a 'pointer to' with a const literal as a type const. Hence const wchar_t* and not wchar_t* as written.
Then you are trying to pass a type const wchar_t* to wchar_t* - which breaks the constness and hence the error message and hence the need to cast away the constness.
The underlying issue here is that SERVICE_TABLE_ENTRY (for unicode) for element lpServiceName is type LPWSTR instead of the more correct LPCWSTR.
Victor's suggestion in post #3 uses an array TCHAR (wchar_t for unicode) into which the const string is copied - so in this case serviceName is of type LPWSTR (wchar_t*) and no casting is now required when used with SERVICE_TABLE_ENTRY.
Re: SERVICE_TABLE_ENTRY - Incorrect character format for the name of the service...?
Quote:
Originally Posted by
Arianax
Hi all,
I'm sure this has been asked before, but what answers I found via search-engine research either weren't clear or didn't help...
I'm writing the SERVICE_TABLE_ENTRY portion of a Windows Service in WinAPI and C++
Code:
SERVICE_TABLE_ENTRY service[] =
{
{serviceName, (LPSERVICE_MAIN_FUNCTION)ServiceMain},
{NULL, NULL}
};
However, the 'serviceName' variable consistently reports the following error:
.
How can I create a variable that is interpreted correctly without the above error?
I've tried:
Code:
LPWSTR serviceName = TEXT("name")
but that also errors...
Try:
Code:
TCHAR serviceName[100]= TEXT("name");
SERVICE_TABLE_ENTRY service[] =
{
{serviceName, (LPSERVICE_MAIN_FUNCTION)ServiceMain},
{NULL, NULL}
};
Re: SERVICE_TABLE_ENTRY - Incorrect character format for the name of the service...?
Thanks for your help @VictorN and @2kaud. Both the cast method and the TCHAR method compiled successfully..!
[Post edited to remove new issue as new thread started here http://forums.codeguru.com/showthrea...ndows-Service]