PDA

Visualizza la versione completa : Utilizzare una DLL in Visual C++ 2008


Lallost
22-11-2010, 12:28
Vi espongo il mio problema:

Io ho creato un progetto DLL con il file header "MathFuncsDll.h"
e il file sorgente "MathFuncsDll.cpp"
All'interno ci sono 4 semplici funzioni che fanno la somma, sottrazione, divisione e moltiplicazione
di 2 numeri.

Copio qui per completezza il codice dei due file:

// MathFuncsDll.h

namespace MathFuncs
{
class MyMathFuncs
{
public:

// Returns a + b
static __declspec(dllexport) double Add(double a, double b);

// Returns a - b
static __declspec(dllexport) double Subtract(double a, double b);

// Returns a * b
static __declspec(dllexport) double Multiply(double a, double b);

// Returns a / b
// Throws DivideByZeroException if b is 0
static __declspec(dllexport) double Divide(double a, double b);
};
}

//************************************************** ****************//

// MathFuncsDll.cpp
// compile with: /EHsc /LD

#include "MathFuncsDll.h"

#include <stdexcept>

using namespace std;

namespace MathFuncs
{
double MyMathFuncs::Add(double a, double b)
{
return a + b;
}

double MyMathFuncs::Subtract(double a, double b)
{
return a - b;
}

double MyMathFuncs::Multiply(double a, double b)
{
return a * b;
}

double MyMathFuncs::Divide(double a, double b)
{
if (b == 0)
{
throw new invalid_argument("b cannot be zero!");
}

return a / b;
}
}

Ora, io ho compilato la soluzione e mi ha generato i seguenti file:
"MathFuncsDll.dll", "MathFuncsDll.lib"

Ho provato a creare un progetto contenuto nella stessa soluzione del progetto DLL, e riesco ad utilizzare le funzioni matematiche della DLL...

Come faccio peṛ ad utilizzarle se voglio creare un progetto in una soluzione nuova?
Ho provato a includere i due file .lib e .dll nella cartella, poi ho creato un file header identico al precedente sostituendo peṛ __declspec(dllimport) al posto di __declspec(dllexport) e nel sorgente del progetto ho utilizzato la funzione:

// Prova DLL.cpp : definisce il punto di ingresso dell'applicazione console.
//

#include "stdafx.h"
#include <iostream>
#include "MathFuncsDll.h"

int _tmain(int argc, _TCHAR* argv[])
{
double int1 = 5;
double int2 = 6;
double ris;

ris = MyMathFuncs::Add(int1, int2);
return 0;
}

Compilando ottengo il seguente errore:

Prova DLL.obj : error LNK2019: riferimento al simbolo esterno "public: static double __cdecl MyMathFuncs::Add(double,double)" (?Add@MyMathFuncs@@SANNN@Z) non risolto nella funzione _wmain
C:\Documents and Settings\Administrator\Documenti\Visual Studio 2008\Projects\Prova DLL\Debug\Prova DLL.exe : fatal error LNK1120: 1 esterni non risolti

Scusate ma non ho mai usato una DLL in un progetto e non riesco a capire come fare...
Grazie

Loading