Bonjour,

Je pense que mon problème est récurent, cependant, je n'arrive pas à trouver de solutions ni de cours répondant à toutes mes questions:

Je souhaite faire une bibliothèque de classes C++ qui seront appelées par plusieurs programmes en C++. Ces classes n'utilisent que la librairie std (vector, map, ...)

Quelle type de DLL ou LIB dois-je utiliser?
avec ou sans MFC?
statique ou dynamique?

Deuxièmement, que doivent contenir ma classe pour pouvoir être instancier correctement ?
Je n'arrive pas à trouver de tuto qui explique comment créer une DLL et la MSDN n'indique strictement rien (à part faite nouveau projet puis DLL dans l'assistant, mdr).

J'ai essayer de créer une DLL sans MFC et dynamique et de l'inclure dans un autre projet (dans les références), mais lors du linkage m'indique qu'il arrive pas à trouver les fonctions:

[BuildLog.html]
Édition des liens en cours...
useDLL.obj : error LNK2001: symbole externe non résolu "public: __thiscall Parameter:arameter(class std::basic_string,class std::allocator >)" (??0Parameter@@QAE@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z)
useDLL.obj : error LNK2001: symbole externe non résolu "public: class std::basic_string,class std::allocator > __thiscall Parameter::getVersion(void)" (?getVersion@Parameter@@QAE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ)
E:\Documents and Settings\AKH\Mes documents\Visual Studio 2005\Projects\useDLL\Release\useDLL.exe : fatal error LNK1120: 2 externes non résolus
[/BuildLog.html]

Si quelqu'un peut m'indiquer des pistes, voire me reseigner sur mon problème.

Voici mes fichiers:

xmldll.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
// xmldll.cpp*: définit le point d'entrée pour l'application DLL.
//
 
#include "stdafx.h"
#include "Parameter.h"
 
#ifdef _MANAGED
#pragma managed(push, off)
#endif
 
BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
					 )
{
    return TRUE;
}
 
#ifdef _MANAGED
#pragma managed(pop)
#endif
 
Parameter *Create(std::string fileName)
{
	return new Parameter(fileName);
}
 
Parameter::Parameter(std::string fileName)
{
	this->_FileName = fileName;
}
 
Parameter::~Parameter(void)
{
}
 
/*
 * Find the version number of file parameter
 *
 * Return version of file, else "none" string
 */
std::string Parameter::getVersion(void)
{
	MinXL::t_xml_node *node;		// To load xml file
 
	if(node = loadParameter())
	{
		node = findNode("version", node);
 
		if(node != NULL)
			return node->attribute_value_at(0);
		else
		{
			delete node;
			return "none";
		}
	}
	delete node;
	return "none";
}
....
Parameter.h
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#pragma once
#include "xml.hpp"
 
#ifndef _VERSION_
#define _VERSION_ "1.0"
#endif
 
#ifndef _XML_PATH_
#define _XML_PATH_ "./parametres.xml"
#endif
 
class Parameter
{
public:
	Parameter(std::string fileName);
	virtual ~Parameter(void);
	virtual std::string getVersion(void);
...
 
private:
	std::string _FileName;
...
);
et le fichier qui utilise la DLL
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
// useDLL.cpp*: définit le point d'entrée pour l'application console.
//
 
#include "stdafx.h"
#include "Parameter.h"
#include <stdlib.h>
#include <stdio.h>
 
 
int _tmain(int argc, _TCHAR* argv[])
{
	Parameter *param = new Parameter("./parametres.xml");
	param->getVersion();
 
	return 0;
}