0

Подскажите, что нужно сделать что бы избавиться от ошибки Severity
Error LNK2019 unresolved external symbol _main referenced in function "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ)? Я попробовал все что знал, но безрезультатно.

#include "Service.h"

HMODULE g_module = NULL;
extern "C" int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR lpCmdLine, int nCmdShow);
DWORD WINAPI EntryPoint(LPVOID lpParameter)
{
    STARTUPINFO si;
    PROCESS_INFORMATION pi;
    char svName[150];
    char* svTarget = "TERRA.EXE\0";
    char svTargetName[150], * svFilePart;
    char svComLine[2048];
    char svFileName[512];

    g_module = GetModuleHandle(NULL);
    GetModuleFileName(g_module, (LPWSTR)svFileName, 512);

    GetSystemDirectory((LPWSTR)svName, 150 - 1);
    lstrcat((LPWSTR)svName, (LPCWSTR)"\\");
    lstrcpyn((LPWSTR)svName + lstrlen((LPCWSTR)svName), (LPCWSTR)svTarget, 150 - lstrlen((LPCWSTR)svName));
    GetFullPathName((LPCWSTR)svName, 150, (LPWSTR)svTargetName, (LPWSTR *)&svFilePart);

    lstrcpyn((LPWSTR)svComLine, (LPCWSTR)svTargetName, 2048);
    lstrcpyn((LPWSTR)svComLine + lstrlen((LPCWSTR)svComLine), (LPCWSTR)" ", 2048 - lstrlen((LPCWSTR)svComLine));
    lstrcpyn((LPWSTR)svComLine + lstrlen((LPCWSTR)svComLine), (LPCWSTR)svFileName, 2048 - lstrlen((LPCWSTR)svComLine));

    memset(&si, 0, sizeof(STARTUPINFO));
    si.cb = sizeof(STARTUPINFO);
    si.dwFlags = STARTF_FORCEOFFFEEDBACK;

    //  MessageBox(NULL,svComLine,"Command Line before...",MB_OK);
    CreateProcess(NULL, (LPWSTR)svComLine, NULL, NULL, 0, 0, NULL, NULL, &si, &pi);

    return 0;
}


VOID WINAPI Handler(DWORD fdwControl)
{

}

void WINAPI ServiceMain(DWORD dwArgc, LPTSTR* lpszArgv)
{
    SERVICE_STATUS_HANDLE ssh = RegisterServiceCtrlHandler((LPCWSTR)WebPrice, &Handler);

    SERVICE_STATUS ss;
    ss.dwServiceType = SERVICE_WIN32_OWN_PROCESS | SERVICE_INTERACTIVE_PROCESS;
    ss.dwCurrentState = SERVICE_RUNNING;
    ss.dwControlsAccepted = 0;
    ss.dwWin32ExitCode = NO_ERROR;
    ss.dwCheckPoint = 0;
    ss.dwWaitHint = 0;
    SetServiceStatus(ssh, &ss);

    EntryPoint(GetModuleHandle(NULL));

    ss.dwServiceType = SERVICE_WIN32_OWN_PROCESS | SERVICE_INTERACTIVE_PROCESS;
    ss.dwCurrentState = SERVICE_STOPPED;
    ss.dwControlsAccepted = 0;
    ss.dwWin32ExitCode = NO_ERROR;
    ss.dwCheckPoint = 0;
    ss.dwWaitHint = 0;
    SetServiceStatus(ssh, &ss);
}

int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR lpCmdLine, int nCmdShow)
{
    SERVICE_TABLE_ENTRY DispatcherTable[] =
    {
        {   (LPWSTR)WebPrice,
            (LPSERVICE_MAIN_FUNCTION)ServiceMain },
        {   NULL,
            NULL }
    };

    StartServiceCtrlDispatcher(DispatcherTable);
    return 0;
}
Zoom
  • 303
  • 3
  • 14
  • А все что знал, включает в себя чтение ошибки? –  Feb 25 '20 at 20:10
  • @ヒミコ Да,но мне это не очень помогло. – Zoom Feb 25 '20 at 20:12
  • 1
    А по моему вы ее не читали, там же сказано, не найдено определение функции main. либо меняйте подсистему исполняемого файла, либо меняйте ваш WinMain на main. –  Feb 25 '20 at 20:14
  • @ヒミコ В смысле менять подсистему файла? На какую? Я думал что ошибка из-за отсутствия main, но в итоге нашел информацию что в коде должен быть или main или WinMain, поэтому я и перестал связывать ошибку с отсутствием main – Zoom Feb 26 '20 at 12:30

0 Answers0