Comment utiliser les fonctions de différents projets C++ dans Visual Studio 2010?
Je voudrais construire deux projets C++ dans la même solution dans Visual Studio 2010 qui peuvent interagir les uns avec les autres. J'ai créé une solution sous répertoire C:\Users\me\Desktop\SolutionDir
. Les deux projets ont été créés respectivement en vertu de l' C:\Users\me\Desktop\SolutionDir\FirstProject
et C:\Users\me\Desktop\SolutionDir\SecondProject
.
Mon premier projet contient deux fichiers, un en-tête function.h
et un fichier cpp function.cpp
fonction.h
#pragma once
void print_stuff();
function.cpp
#include "function.h"
#include <iostream>
void print_stuff() {
std::cout << "hello world" << std::endl;
}
Mon second projet contient le fichier principal main.cpp
main.cpp
#include "FirstProject\function.h"
#include <iostream>
int main(void) {
print_stuff();
int stop;
std::cin >> stop;
return 0;
}
J'ai ajouté le répertoire C:\Users\me\Desktop\SolutionDir\
dans mon SecondProject Configuration Properties > C/C++ > General > Additional Include Directories
. J'ai toujours l'erreur classique : error LNK2019: unresolved external symbol
lors de l'appel de la fonction print_stuff()
.
Des idées ?
OriginalL'auteur vanna | 2012-05-03
Vous devez vous connecter pour publier un commentaire.
Essayez de construire le premier projet d'une Bibliothèque Statique dans les Propriétés du Projet/Propriétés de Configuration/Général/Type de Configuration.
Puis dans votre projet de propriétés pour le second projet, vous aurez besoin de changer deux choses:
.lib
est construit..lib
fichier commeFirstProject.lib
ou quel que soit son nom est.OriginalL'auteur Chris A.
Oui, vous devez exporter les fonctions à l'aide de
_declspec(dllexport)
et de les importer dans le projet qui appelle les fonctions avec_declspec(dllimport)
.Cette dualité est généralement réalisé avec une macro:
Dans la configuration de votre premier projet, vous ajoutez
FIRST_PROJECT_BUILD
à vos directives de préprocesseur. De cette façon, lorsque vous compilez le projet d'abord, vous dire au compilateur que la fonction doit être exporté. Toutefois, lorsque vous incluez le fichier dans un autre projet, qui n'a pasFIRST_PROJECT_BUILD
défini, vous dire au compilateur que la fonction est mise en œuvre dans une autre bibliothèque et doivent être importés.Aussi, en plus d'ajouter le supplément chemins à inclure, vous devez ajouter le générés
.lib
des fichiers à partir de projets de mise en œuvre les fonctions de laExtra dependencies
onglet dans la Doublure de vos paramètres de configuration du projet..dll
J'ai déduit que l'OP ne sais pas à propos de Dll. Vous ne serez pas en mesure de leur dire tout ce qu'ils ont besoin de savoir,mais un lien ou quelque chose pourrait les mettre sur leur chemin.
pourquoi? Ne pouvez-vous pas charger dynamiquement un fichier exe? 🙂
J'étais sous l'impression que
_declspec(dllexport)
seulement doit être utilisé lors de l'exportation à partir d'un.dll
. Il fonctionne aussi si le premier projet est une bibliothèque statique?IDK si c'est nécessaire pour une lib statique, mais je ne vois pas pourquoi cela ne fonctionne pas.
OriginalL'auteur Luchian Grigore
Vous pouvez inclure un realPath pour vous d'inclure répertoire !
Comme pour votre FirstProject include "./../"
Et même inclure des dir pour votre deuxième Projet de ce genre, vous pouvez déplacer ou copier votre répertoire SolutionDir et il le sera toujours !
Pour votre non résolus liés, vous devez ajouter l'function.cpp et de la fonction.h, dans le Premier et le Deuxième Projet
Vous pouvez le placer dans SolutionDir!
Comme toujours Vous avez deux fichiers pour votre première et deuxième projet au lieu de quatre !
Espère que cela aide !
OriginalL'auteur kavaliero