问题遇到的现象和发生背景
网上找了一段编写windows服务的框架代码,vsCode没有提示语法错误,但编译时报错,我的环境是vsCode+MinGW_10.0,使用g++命令编译。
问题相关代码
#include <Windows.h>
#include <stdio.h>
#define SERVICENAME L"ServiceDemo"
int main()
{
WCHAR ServiceName[] = SERVICENAME;
SERVICE_TABLE_ENTRY DispatchTable[2];
DispatchTable[0].lpServiceName = ServiceName; //此行为问题代码
}
运行结果及报错内容
我的解答思路和尝试过的方法
错误提示说不能将WCHAR转换为LPSTR,我查看了DispatchTable[0].lpServiceName在winsvc.h中定义,它是LPWSTR类型,跟LPSTR没有关系啊?
typedef struct _SERVICE_TABLE_ENTRYW {
LPWSTR lpServiceName;
LPSERVICE_MAIN_FUNCTIONW lpServiceProc;
} SERVICE_TABLE_ENTRYW,*LPSERVICE_TABLE_ENTRYW;
我又尝试给DispatchTable[0].lpServiceName赋一个LPSTR的值,
LPSTR MyServerName = (LPSTR)"MyServer";
DispatchTable[0].lpServiceName = MyServerName;
结果vsCode提示语法错误:不能将LPSTR类型的值分配到LPWSTR类型的实体,但能够通过编译,并且能够成功运行。
我想要达到的结果
这里我就有点不理解了:为什么给LPWSTR的变量赋LPSTR的值,反而能通过编译。明明提示有错误啊?希望能够解下疑。