Tengo un problema muy vago, pero espero que alguien pueda ayudarlo. Estaba modificando un proyecto de C++ y ayer todavía funcionaba, pero hoy no es así. Estoy bastante seguro de que no cambié nada, pero estoy completamente seguro de que revisé el proyecto desde SVN nuevamente e incluso volví a un punto anterior de restauración del sistema (porque esta es una computadora de trabajo, a veces instala secretamente actualizaciones, etc.) Después de compilarlo satisfactoriamente, el programa puede iniciarse, pero después de interactuar con él, aparece este error: El punto de entrada del procedimiento? MethodName @ className @@ UAEXXZ no se pudo ubicar en la biblioteca de vínculos dinámicos libName.dll.¿Por qué no se puede ubicar un "punto de entrada de procedimiento en dll" cuando definitivamente lo coloco?
He buscado en Internet, pero los problemas de la mayoría de las personas parecen ser causados por una versión anterior de la DLL que se utiliza. Busqué en mi computadora y no hay una versión anterior. Si elimino la versión correcta, la aplicación no se inicia. Si luego vuelvo a compilar el proyecto, el archivo DLL se crea nuevamente, por lo que estoy bastante seguro de que la aplicación está utilizando la DLL correcta y de que la compilación la está creando. Si introduzco errores de sintaxis en el método al que se refiere el error, el proyecto se niega a compilar, así que supongo que esto significa que también está compilando los archivos que contienen el método.
Básicamente no sé nada sobre DLL, enlaces, etc. por lo que agradecería muchísimo si alguien tiene una idea de por qué las funciones que están claramente definidas en el proyecto de repente no lo hacen en la DLL más. Sé que esto es impreciso y si se requiere más información, con mucho gusto lo proporcionaré. ¡Gracias!
Actualización: He intentado las sugerencias dadas, pero todavía estoy atascado. __declspec(dllexport)
aparentemente no se usa en todo el proyecto. Al abrir el archivo DLL con Dependency Walker, se muestra una sección superior derecha vacía y la sección debajo enumera la función del mensaje de error. Si puedo comprobar Undecorate C++ Funciones se ve bien, pero si no lo hago me sale los signos de interrogación y extraños @s desde el mensaje de error y no parece haber una diferencia en el final:
[email protected]@@UAEXXZ
[email protected]@@[email protected]
Tal vez este es el problema, pero no tengo idea de lo que significa, lo que pudo haber causado esto y lo que puedo hacer al respecto.
¿Ha intentado agregar/opciones de compilador de Wall a VC++? Podría dar una pista ... – Romain