Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Eternal Idol

#391
Error    LNK1104    no se puede abrir el archivo 'super_dll.lib'  .

Si tenes una solucion con ambos proyectos deberias poder hacerlos dependientes, de otra manera simplemente copia el archivo donde corresponda para que el enlazador lo encuentre.
#392
El primer error esta incluso antes:
int num=1;

Y hay mas errores como no poner comillas y/o parentesis donde corresponde.
#393
Lo que habias puesto originalmente con dllimport - y lo ultimo tambien - fallara al enlazar, aun pasandole el Super_dll.lib, por usar en la DLL extern "C" y en el programa no.




Esto se puede generar en 2' usando el Visual Studio 20XX Developer Command Prompt y estos 2 archivos:

Super_dll.cpp:
Código (c++) [Seleccionar]
//build con:: cl /Zi /LD Super_dll.cpp
#include <windows.h>

extern "C"
{
__declspec(dllexport) int WINAPI Suma(int, int);
__declspec(dllexport) LPTSTR WINAPI Mensaje();
};

// Suma.
int WINAPI Suma(int a, int b) { return a + b; }
// Mensaje.
LPTSTR WINAPI Mensaje() { return LPTSTR(L"Hola. Soy una DLL Win32."); }


BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved )
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}


consola.cpp:
Código (c++) [Seleccionar]
//build con:: cl /Zi consola.cpp Super_dll.lib
#include <iostream>
#include <windows.h>
   
extern "C"
{
int WINAPI Suma(int a, int b);
LPWSTR WINAPI Mensaje();
};
   
int main()
{
std::wcout << Mensaje();
std::cout << Suma(1764, -764);

// Esperando pulsar Enter para salir.
std::cin.get();
return 0;
}



PD. Aca usaste la L asi que esto es wchar_t y no podes usar cout (ni LPTSTR sin configurar el programa como Unicode). LPTSTR WINAPI Mensaje() { return LPTSTR(L"Hola. Soy una DLL Win32 escrito en C++."); }
#394
Cita de: Meta en 18 Junio 2020, 14:23 PM
Da problemas como puse arriba.

Estas haciendo algo mal (desde la primera vez que te respondi que lo tengo funcionando).

En lugar de poner codigo de otros lenguajes pone solamente el codigo de C++ que estas usando ahora mismo y los errores que te da al generar el ejecutable (no sabemos si esta fallando al compilar o enlazar por ejemplo).
#395
Si, eso compila y se enlazara con Super_dll.lib correctamente.
#396
No estas haciendo ningun #include de tu nuevo .h asi que obviamente no lo va a incluir en el codigo. En el ultimo caso lo estas definiendo DESPUES de usarlo, eso tampoco funcionara.

Y presta atencion, Marshal no es nada y SUPER_DLL tampoco, ToString no existe ni PtrToStringAuto. Lee los errores para remediarlos y mira los ejemplos de como llamar a las funciones que deje antes.
#397
Deberias crear un .h con las funciones. Hay dos formas de llamar a esas funciones de la DLL, enlazando estatica y dinamicamente.

En la primera usas el .lib generado por el proyecto de la DLL al enlazar el ejecutable.

Código (c++) [Seleccionar]
extern "C"
{
int WINAPI Suma(int a, int b);
LPTSTR WINAPI Mensaje();
};
...
std::cout << Suma(5, 4);



En la segunda usas LoadLibrary y GetProcAddress (no hay comprobacion de errores, LoadLibrary puede retornar un error y GetProcAddress un puntero nulo por ejemplo).

Código (c++) [Seleccionar]
typedef LPTSTR (WINAPI *Mensaje_ptr)();
HMODULE sdll = LoadLibrary("Super_dll.dll");
Mensaje_ptr Mensaje = (Mensaje_ptr)GetProcAddress(sdll, "Mensaje");
std::cout << Mensaje();


PD. Si usas LPTSTR tenes que hacer coincidir ANSI/Unicode en ambos proyectos y si usaste Unicode usar std::wcout. Microsoft suele usar funciones terminadas en A y W para estos casos.
#398
Programación C/C++ / Re: Capturar tecla
16 Junio 2020, 22:27 PM
De nada  ::)
#399
Programación C/C++ / Re: Capturar tecla
16 Junio 2020, 13:57 PM
ReadConsole.

Todo sobre consola de texto en Windows: https://docs.microsoft.com/en-us/windows/console/
#400
Cita de: JGasC en  9 Junio 2020, 08:44 AM
Buenas noches, no busco eso solo alguna guía nada más.

Es una tarea y no estas preguntando nada ni mostrando lo que hiciste hasta ahora, o planteas una duda concreta o el tema sera bloqueado.




Reglas del subforo:
    Este no es un subforo donde se soliciten tareas, sino un lugar donde resolver dudas.