usar DLL en un programa


27 de Noviembre del 2015

Hola, buenas soy nuevo en el foro y me gustaría que alguien me echase una mano, ya que llevo bastantes dias con este tema y por mucho que miro en internet no consigo solucionarlo.

Quiero hacer una dll y poder acceder a ella desde otro programa c++. El codigo de la dll compila sin ningún problema, arrojando un fichero .lib

Cuando hago el codigo del programa que va utilizar la dll en la configuración pongo en el include el .h del programa de la dll y en la libreria el .lib. Al compilarlo me da el siguiente error y no se a que puede ser debido.

error LNK2019: símbolo externo "__declspec(dllimport) public: void __thiscall Imprimir::Imprime(char *)" ([email protected]@@[email protected]) sin resolver al que se hace referencia en la función "long __stdcall WndProc(struct HWND__ *,unsigned int,unsigned int,long)" ([email protected]@[email protected]@[email protected])

Espero haberme explicado bien. A continuación pongo el codigo que tengo en cada uno de los dos programas

ProyectoDLL.h

#ifndef _ProyectoDLL_H_
#define _ProyectoDLL_H_

#include <Windows.h>

#ifdef PROYECTODLL_EXPORTS
#define EXPORT_API __declspec(dllexport)
#else
#define EXPORT_API __declspec(dllimport)
#endif

class EXPORT_API Imprimir
{
public:
void Imprime(char *texto);
};

#endif

ProyectoDll.cpp

#include "stdafx.h"
#include <iostream>
#include "ProyectoDLL.h"
using namespace std;

void Imprimir::Imprime(char *texto)
{
cout << texto << endl;
}

 

y en el proyecto donde voy a usar la dll

PrubeDll.cpp

#include <fcntl.h>
#include <stdio.h>
#include <ProyectoDLL.h>
using namespace std;

#pragma region Variables
HWND hWnd;
HINSTANCE hInst;
#pragma endregion

#pragma region Declaración funciones
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
#pragma endregion

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
static TCHAR szWindowClass[] = TEXT("Win32app");
static TCHAR szTitle[] = TEXT("Titulo de la Aplicación");

.....

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
Imprimir *imprimir = new Imprimir();
switch (message)
{
case WM_KEYDOWN:
imprimir->Imprime("pepe");
break;
case WM_QUIT:
DestroyWindow(hWnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}

return 0;
}

Muchas gracias por vuestra atención. Saludos