Bonjour,
je veux ajouter une dll a mon projet , je travail ave c visual Studio 2005, jai fait refferences mais je peux pas ajouter, aidez moi SVP.
Version imprimable
Bonjour,
je veux ajouter une dll a mon projet , je travail ave c visual Studio 2005, jai fait refferences mais je peux pas ajouter, aidez moi SVP.
as-tu ajouté #import "tadll.dll"??
Tu ajoutes le repertoire où se trouve le .h de ta dll dans le directory des includes et tu ajoutes le repertoire où se trouve le .lib dans le directory des librairies (linker)
Ensuite dans ton source
Code:
1
2
3 #include "madll.h" <..> fonc_dll();
Ca existe #import "madll.dll" ??? tu as testé ?
moi s'est se que j'ai fait pour la msxml.dll
avec using namespace MSXML2;
mais je sais pas si sa s'applique a tout les dll
ah d'accord
pour cette API, il y'a Netica.dll, et Netica.h, et Netica.lib.Citation:
Envoyé par hegros
jai ajouté #include<Netica.h>
et aussi dans linker->Input-> le chemin de lib
mais quand je fait debug il y'a erreur
1>LINK : fatal error LNK1104: cannot open file 'C:\Documents.obj'
je travail avec Visual Studio 2005 il y'a debug et release qu'elle est la difference?
merci
En debug des informations sont rajoutées pour justement pouvoir débugger en mode release non c'est la version cliente
Tu as ajouté comment le .h das le projet ? Tu peux sinon faire un clic droit sous l'arborescence où se trouve tes fichiers de ton projet et ajouté le .h de la dll et ensuite
#include "dll.h"
note bien que j'ai mis entre " et non entre <> (tu mets entre <> lorsque tu ajoutes le directory des includes dans la config de visual)
Tu as essayé la méthode #import "madll.dll" ?
oui jai mis #include avec les "", quand jai mis #import"Netica.dll", il ya le message d'erreur qui apparait:Citation:
Envoyé par hegros
fatal error C1083: Cannot open type library file: 'c:\documents and settings\abbd\mes documents\visual studio 2005\projects\dfdf\dfdf\netica.dll': Erreur lors du chargement de la bibliothèque/DLL du type.
jai ajouter #include
"Netica.h"
#import "Netica.dll"
Dans MONprojet.cpp tout en haut
merci
Rassure-moi où se trouve la DLL,le .LIB et le .h
les 3 se trouve dans le repertoire de mon projet, exactement dans C:\Documents and Settings\abbd\Mes documents\Visual Studio 2005\Projects\dfdf\dfdf
après le Netica.h je lé ajouté dans Header Files, puis jais ajouté le chemin du .lib dans linker>input, puis jais ajouté du code c-à-d l'include et l'import
merci d'avance
Fais l'une ou l'autre méthode pas les 2 en même temps.
Le mieux est de refaire un projet vierge avec un minimum de code (le mieux que la fonction principale et l'include du header de la dll)
Ajouter le .h au projet (clic droit sur l'arborescence du projet/add et tu ajoutes ton .h)
Faire ton #include "dll.h" et c'est tout puis compilé tu auras passé l'étape 1
L'étape 2 est ensuite d'ajouter au linker le .LIB compilez si ok étape 3
L'étape 3 est de faire appel à une fonction de la dll dans ton source.
pour la 1er étape quand je fait le #include ,bien sur en ajoutant dans le répertoire du projet, en compilant il me dit :
fatal error C1083: Cannot open type library file: 'Netica.dll': No such file or directory
Comment peut-il te dire cela si tu inclus Netica.h ?Citation:
Envoyé par abbd
Code:#include "Netica.h"
oui dsl, c'est moi qui a fait l'erreur jai ajouté #import "Netica.dll" sans faire expret,
pour la 2ème étape il y'a erreur :
fatal error LNK1104: cannot open file 'C:\Documents.obj'
merci
Ok donc quand tu inclus "Netica.h" ca compile.
Il faut pas désactiver une option dans visual pour cette erreur ? Me souviens plus :oops:
C'est quoi la deuxiéme étape que tu as fais ? :aie:
la 2ème etape c'est introduire le chemin Netica.lib dans Linker>Input
Ca doit pas être ici qu'il faut l'ajouter...Sinon je ne vois pas.Citation:
Envoyé par abbd
Essaie en mettant cette ligne au dessus de ton #include "Netica.h"
et vire ce que tu as fais dans l'étape 2.Code:#pragma comment lib ("C:\...\MaDll.lib");
Lorsque je tape ce code #pragma comment lib ("C:\Documents and Settings\abbd\Mes documents\Visual Studio 2005\Projects\pro\pro\netica.lib"); il y'a pas erreur
Par contre il faut que tu doubles les \Citation:
Envoyé par abbd
En plus tu as des repertoires avec des espaces ce qui ne facilite pas la tâche :aie: Tu devrais normalement les mettre entre ""Code:#pragma comment lib ("C:\\Documents and Settings\\abbd\\Mes documents\\Visual Studio 2005\\Projects\\pro\\pro\\netica.lib");
Tu ne peux pas mettre ta lib dans un repertoire ou il n'y a pas d'espace :aie: Genre C:\LIB\NETICA
ok, quand je met Netica.lib dans C:\, puis je l'ajoute dans linker>input il y'a pas l'erreur de tout a l'heur je croix que c'est du au chemin qui est lon et les espaces, merci
Si tu as ajouté ton .h que tu as ajouté le #pragma pour le .lib et que tout cela compile sans erreur alors tu dois maintenant pouvoir utiliser les fonctions de ta dll dans le source genre : (je ne connais pas les fonctions de cette dll) :
Et ca devrait compiler et linker et s'executer.Code:fonc1_Netica();
N'oublies pas que ton .dll doit être dans le PATH (repertoire de l'exeuctable ou alors dans un des repertoire définis dans la variable d'environnement PATH)
il y'a la 3ème étape qui fait erreur, quand j'ajoute #import "Netica.dll",
l'erreur est
fatal error C1083: Cannot open type library file: 'c:\documents and settings\abbd\mes documents\visual studio 2005\projects\dfdf\dfdf\netica.dll': Erreur lors du chargement de la bibliothèque/DLL du type.
est ce que cette ligne de code est necessaire?merci
Non ce n'est plus nécessaire.Citation:
Envoyé par abbd
L'étape 3 c'est d'appeler une fonction ;)
Code:func_Netica();
il y'a ce code qui utilise la dll, il est ecrit dans C, mais normalement sa doit marché dans C++ surtout qu'on a integré la dll
mais dans MFC printf ne marche pas,jai essayé MessageBox("mon message");Citation:
int main (void){
net_bn *net;
node_bn *VisitAsia, *Tuberculosis, *Smoking, *Cancer, *TbOrCa, *XRay;
double belief;
char mesg[MESG_LEN_ns];
int res;
printf ("\nWelcome to Netica API!\n");
printf ("This demo project is from the first 2 examples of the Reference Manual.\n");
printf ("If it compiles, links and runs successfully (i.e. without generating\n");
printf ("errors), then your installation is probably good.\n");
printf ("Now you can replace the Demo.c file with your own code.\n");
printf ("--------------------------------------------------------------------\n\n");
env = NewNeticaEnviron_ns (NULL, NULL, NULL);
res = InitNetica_bn (&env, mesg);
printf ("%s\n", mesg);
if (res < 0) return -1;
net = NewNet_bn ("AsiaEx", env);
CHKERR
VisitAsia = NewNode_bn ("VisitAsia", 2, net);
Tuberculosis = NewNode_bn ("Tuberculosis", 2, net);
Smoking = NewNode_bn ("Smoking", 2, net);
Cancer = NewNode_bn ("Cancer", 2, net);
TbOrCa = NewNode_bn ("TbOrCa", 2, net);
XRay = NewNode_bn ("XRay", 2, net);
CHKERR
SetNodeStateNames_bn (VisitAsia, "visit, no_visit");
SetNodeStateNames_bn (Tuberculosis,"present, absent");
SetNodeStateNames_bn (Smoking, "smoker, nonsmoker");
SetNodeStateNames_bn (Cancer, "present, absent");
SetNodeStateNames_bn (TbOrCa, "true, false");
SetNodeStateNames_bn (XRay, "abnormal,normal");
SetNodeTitle_bn (TbOrCa, "Tuberculosis or Cancer");
SetNodeTitle_bn (Cancer, "Lung Cancer");
CHKERR
AddLink_bn (VisitAsia, Tuberculosis);
AddLink_bn (Smoking, Cancer);
AddLink_bn (Tuberculosis, TbOrCa);
AddLink_bn (Cancer, TbOrCa);
AddLink_bn (TbOrCa, XRay);
CHKERR
SetNodeProbs (VisitAsia, 0.01, 0.99);
SetNodeProbs (Tuberculosis, "visit", 0.05, 0.95);
SetNodeProbs (Tuberculosis, "no_visit", 0.01, 0.99);
SetNodeProbs (Smoking, 0.5, 0.5);
SetNodeProbs (Cancer, "smoker", 0.1, 0.9);
SetNodeProbs (Cancer, "nonsmoker", 0.01, 0.99);
// Tuberculosis Cancer
SetNodeProbs (TbOrCa, "present", "present", 1.0, 0.0);
SetNodeProbs (TbOrCa, "present", "absent", 1.0, 0.0);
SetNodeProbs (TbOrCa, "absent", "present", 1.0, 0.0);
SetNodeProbs (TbOrCa, "absent", "absent", 0.0, 1.0);
// TbOrCa Abnormal Normal
SetNodeProbs (XRay, "true", 0.98, 0.02);
SetNodeProbs (XRay, "false", 0.05, 0.95);
CHKERR
CompileNet_bn (net);
CHKERR
belief = GetNodeBelief ("Tuberculosis", "present", net);
CHKERR
printf ("The probability of tuberculosis is %g\n\n", belief);
EnterFinding ("XRay", "abnormal", net);
belief = GetNodeBelief ("Tuberculosis", "present", net);
CHKERR
printf ("Given an abnormal X-ray, \n\
the probability of tuberculosis is %g\n\n", belief);
EnterFinding ("VisitAsia", "visit", net);
belief = GetNodeBelief ("Tuberculosis", "present", net);
CHKERR
printf ("Given an abnormal X-ray and a visit to Asia, \n\
the probability of tuberculosis is %g\n\n", belief);
EnterFinding ("Cancer", "present", net);
belief = GetNodeBelief ("Tuberculosis", "present", net);
CHKERR
printf ("Given abnormal X-ray, Asia visit, and lung cancer, \n\
the probability of tuberculosis is %g\n\n", belief);
end:
DeleteNet_bn (net);
res = CloseNetica_bn (env, mesg);
printf ("%s\n", mesg);
printf ("Press <enter> key to quit ", mesg);
getchar();
return (res < 0) ? -1 : 0;
error:
fprintf (stderr, "NeticaDemo: Error in %s\n",
ErrorMessage_ns (GetError_ns (env, ERROR_ERR, NULL)));
goto end;
}
il fait erreur; mais normalement MessageBox affiche normalement un messsage box dans les MFC, parceque jai travailler avec les MFC dans visual C++ 6 sans problem,merci
Si ca compile et s'execute tu as alors un autre probléme.
Pour afficher des messages dans la console avec les MFC il me semble qu'il existe une fonction PTRACE je crois ?
le code qui est ecrit au dessus la fonction main retourne un entier, pour l'essayer en C++ jai copier le code du mai et je lé copier dans un boutton mais la fonction mais retourne un entier il ya des erreur du genre
error LNK2019: unresolved external symbol _GetNodeBelief referenced in function "public: void __thiscall CrrrrDlg::OnBnClickedButton1(void)" (?OnBnClickedButton1@CrrrrDlg@@QAEXXZ)
merci
Je ne vois pas le code d'ou vient l'erreur...
Tu as bien fais un projet MFC ? Toujours dans la configuration : use MFC library.
Mais sur ce coup là je ne pourrais t'être d'une grande aide, j'ai renoncé aux MFC depuis longtemps :twisted:
OuiCitation:
Envoyé par hegros
j'utilise les MFC Application quand je compile il me fait 3erreur:
1>rrrrDlg.obj : error LNK2019: unresolved external symbol _GetNodeBelief referenced in function "public: void __thiscall CrrrrDlg::OnBnClickedButton1(void)" (?OnBnClickedButton1@CrrrrDlg@@QAEXXZ)
1>rrrrDlg.obj : error LNK2019: unresolved external symbol _SetNodeProbs referenced in function "public: void __thiscall CrrrrDlg::OnBnClickedButton1(void)" (?OnBnClickedButton1@CrrrrDlg@@QAEXXZ)
1>rrrrDlg.obj : error LNK2001: unresolved external symbol _env
sachant que jai réduit du code, jai ecris le code suivant dans ub bouton
merciCitation:
net_bn *net;
node_bn *VisitAsia, *Tuberculosis, *Smoking, *Cancer, *TbOrCa, *XRay;
double belief;
char mesg[MESG_LEN_ns];
int res;
env = NewNeticaEnviron_ns (NULL, NULL, NULL);
res = InitNetica_bn (&env, mesg);
net = NewNet_bn ("AsiaEx", env);
VisitAsia = NewNode_bn ("VisitAsia", 2, net);
Tuberculosis = NewNode_bn ("Tuberculosis", 2, net);
Smoking = NewNode_bn ("Smoking", 2, net);
Cancer = NewNode_bn ("Cancer", 2, net);
TbOrCa = NewNode_bn ("TbOrCa", 2, net);
XRay = NewNode_bn ("XRay", 2, net);
SetNodeStateNames_bn (VisitAsia, "visit, no_visit");
SetNodeStateNames_bn (Tuberculosis,"present, absent");
SetNodeStateNames_bn (Smoking, "smoker, nonsmoker");
SetNodeStateNames_bn (Cancer, "present, absent");
SetNodeStateNames_bn (TbOrCa, "true, false");
SetNodeStateNames_bn (XRay, "abnormal,normal");
SetNodeTitle_bn (TbOrCa, "Tuberculosis or Cancer");
SetNodeTitle_bn (Cancer, "Lung Cancer");
AddLink_bn (VisitAsia, Tuberculosis);
AddLink_bn (Smoking, Cancer);
AddLink_bn (Tuberculosis, TbOrCa);
AddLink_bn (Cancer, TbOrCa);
AddLink_bn (TbOrCa, XRay);
SetNodeProbs (VisitAsia, 0.01, 0.99);
SetNodeProbs (Tuberculosis, "visit", 0.05, 0.95);
SetNodeProbs (Tuberculosis, "no_visit", 0.01, 0.99);
SetNodeProbs (Smoking, 0.5, 0.5);
SetNodeProbs (Cancer, "smoker", 0.1, 0.9);
SetNodeProbs (Cancer, "nonsmoker", 0.01, 0.99);
SetNodeProbs (TbOrCa, "present", "present", 1.0, 0.0);
SetNodeProbs (TbOrCa, "present", "absent", 1.0, 0.0);
SetNodeProbs (TbOrCa, "absent", "present", 1.0, 0.0);
SetNodeProbs (TbOrCa, "absent", "absent", 0.0, 1.0);
SetNodeProbs (XRay, "true", 0.98, 0.02);
SetNodeProbs (XRay, "false", 0.05, 0.95);
CompileNet_bn (net);
belief = GetNodeBelief ("Tuberculosis", "present", net);
printf ("The probability of tuberculosis is %g\n\n", belief);
Est ce que #include"Netica.h" je doit le mettre que dans MonprojetDlg.cpp?
il y'a toujours des erreur du type :
error LNK2019: unresolved external symbol _EnterFinding referenced in function "public: void __thiscall CrrrrDlg::OnBnClickedButton1(void)" (?OnBnClickedButton1@CrrrrDlg@@QAEXXZ)
error LNK2019: unresolved external symbol _GetNodeBelief referenced in function "public: void __thiscall CrrrrDlg::OnBnClickedButton1(void)" (?OnBnClickedButton1@CrrrrDlg@@QAEXXZ)
error LNK2019: unresolved external symbol _SetNodeProbs referenced in function "public: void __thiscall CrrrrDlg::OnBnClickedButton1(void)" (?OnBnClickedButton1@CrrrrDlg@@QAEXXZ)
error LNK2001: unresolved external symbol _env
merci d'avance