Gracias, pero eso utiliza referencias, osea reutiliza el codigo de la dll, aca tengo la dll en la carpeta con esa función sola, para testear el programa y un proyecto en VC++ el cuál estoy tratando de llamar a esa funcion.
Lh: No hagas doble post, utiliza el botón modificar.Pude lograr que no tire error, pero no me muestra el MsgBox "Mensaje!"
#include <iostream>
#include <windows.h>
using namespace std;
typedef void (*MsgFunction) (void);
HINSTANCE hinstDLL;
int main()
{
MsgFunction MsgBox;
hinstDLL = LoadLibrary("Project1.dll");
if(hinstDLL != 0)
{
printf("DLL LOADED.\n");
MsgBox = (MsgFunction)GetProcAddress(hinstDLL,"Mensaje");
if(MsgBox != 0)
{
printf("FUNCTION FOUND.\n");
//Call Function
MsgBox;
}
else
{
printf("FUNCTION NOT FOUND.\n");
}
// Unload DLL file
FreeLibrary(hinstDLL);
}
else
{
printf("DLL NOT LOADED.\n");
}
system("PAUSE");
return 0;
}
Lh: Uniendo mensajes nuevamente, la próxima borro sin aviso. Utiliza el botón modificar.Pude arreglar el problema, uno era en typedef, que le tenía que agregar WINAPI y otro en llamar a la función, para eso hice 2 funciones, una Mensaje y otra Suma, la Suma lo hace bien sin errores, pero a la hora de llamar a Mensaje, me muestra el mensaje ("Test") y luego crashea el programa tirando error ModName: msvbm60.dll. Alguna idea?
Acá les dejo todo el código:
Option Explicit
Public Declare Function MessageBox Lib "user32" Alias "MessageBoxA" (ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long) As Long
Public Sub Mensaje()
MessageBox 0, "Test", "Caption", 0
End Sub
Public Function Suma(ByVal n1 As Long, ByVal N2 As Long) As Long
Suma = n1 + N2
End Function
#include <iostream>
#include <windows.h>
using namespace std;
typedef void (WINAPI*MsgFunction) ();
typedef long (WINAPI*SumaFunction) (long,long);
int main()
{
MsgFunction MsgBox;
SumaFunction Suma;
HINSTANCE hinstDLL = LoadLibrary("Project1.dll");
if(hinstDLL != 0)
{
printf("DLL LOADED.\n");
MsgBox = (MsgFunction)GetProcAddress(hinstDLL,"Mensaje");
MsgBox();
Suma = (SumaFunction)GetProcAddress(hinstDLL,"Suma");
long x = Suma(6,6);
if(x == 12)
{
cout << "Message Displayed!\n";
}
// Unload DLL file
FreeLibrary(hinstDLL);
}
else
{
printf("DLL NOT LOADED.\n");
}
system("PAUSE");
return 0;
}