es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Símbolo externo no resuelto _main referenciado en la función ___tmainCRTStartup de dlls.

He escrito el siguiente código como muestra:

#include <stdio.h>
#include <windows.h>
#include <tchar.h>

extern “C” BOOL WINAPI DllMain(HINSTANCE arg_instance, DWORD arg_reason, LPVOID arg_reserved)
{
     switch(arg_reason)
    {
        case DLL_PROCESS_ATTACH: puts(“DllMain llamado para DLL_PROCESS_ATTACH”); break;
        case DLL_PROCESS_DETACH: puts(“DllMain llamado para DLL_PROCESS_DETACH”); break;
    }

    return TRUE;
}

Luego intento vincularlo con el siguiente comando:

link DllWithEntryPoint.obj / DLL / ENTRY: DllMain

Me da los siguientes errores:

LIBCMT.lib (crt0.obj): error LNK2019: símbolo externo no resuelto principal
referenciado en la función __tmainCRTStartup algo.dll: error fatal
LNK1120: 1 externo no resuelto

¿Dónde está mi error y cómo puedo vincularlo correctamente?</tchar.h></windows.h></stdio.h>

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Este error ocurre porque el enlazador no puede resolver el punto de entrada del ejecutable o DLL. En este caso, el error se produce porque la función main no ha sido definida, lo que suele ser el punto de entrada para las aplicaciones de consola. Como esto es una DLL y no una aplicación de consola, la eliminación de #include <stdio.h> y #include <tchar.h> del código debería resolver el error. El código modificado debería ser así:

    #include <windows.h>
    
    extern "C" BOOL WINAPI DllMain(HINSTANCE arg_instance, DWORD arg_reason, LPVOID arg_reserved)
    {
        switch(arg_reason)
        {
            case DLL_PROCESS_ATTACH: puts("DllMain llamado para DLL_PROCESS_ATTACH"); break;
            case DLL_PROCESS_DETACH: puts("DllMain llamado para DLL_PROCESS_DETACH"); break;
        }
    
        return TRUE;
    }
    

    Después de modificar el código, use el mismo comando de enlazador para enlazar la DLL con el archivo de objeto actualizado.</windows.h></tchar.h></stdio.h>

Comments are closed.