Compilation dll avec appelle de fonctions externes

pingosso Messages postés 10 Date d'inscription jeudi 6 août 2009 Statut Membre Dernière intervention 21 août 2009 - 14 août 2009 à 15:39
pingosso Messages postés 10 Date d'inscription jeudi 6 août 2009 Statut Membre Dernière intervention 21 août 2009 - 20 août 2009 à 10:41
Bonjour,

Je travaille en ce moment sur un projet qui rassemble du C du VB.NET et du fortran.

EN fait j'ai un problème pour faire communiquer le simulateur en C et Fortran, et l'interface graphique qui est en VB.NET.

Je voulais passer par le __declspec(dllexport) (ce qui marche très bien quand on travaille sur une dll toute simple), mais le problème c'est que je n'arrive pas à compiler une dll avec VC++ (6.0) quand il y a des appels à des fonctions ou données externes via les headers?!!!

J'ai à chaque fois une erreur de link lnk_2001 avec un "unresolved identifier _XXX" (XXX étant le nom de ma fonction ou de la structure que je veux utiliser)

Par contre si je mets le même code dans une librairie statique là ça marche, mais alors du coup impossible de faire appel à la librairie à partir de VB.NET.

Merci par avance de votre aide, même si c'est pour me dire d'arrêter le prog lol!

Lo

7 réponses

cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
14 août 2009 à 16:22
As-tu mis ceci dans ton code ?
#pragma comment(lib,"chemin du fichier.lib")

---
VB.NET is good ... VB6 is better
0
pingosso Messages postés 10 Date d'inscription jeudi 6 août 2009 Statut Membre Dernière intervention 21 août 2009
17 août 2009 à 08:10
Non!!!?

Mais dans quel code? Celui de la dll ou celui de la lib qui contient le header et la fonction que je souhaite utiliser?

Comment fonctionne ce #pragma comment?

Merci pour ta réponse.

Lo
0
pingosso Messages postés 10 Date d'inscription jeudi 6 août 2009 Statut Membre Dernière intervention 21 août 2009
17 août 2009 à 08:43
Je viens de tester le #pragma comment et ça ne marche pas. Il me ressort cette erreur:

error LNK2001: unresolved external symbol _lolo

"lolo" étant le nom d'une structure de ma librairie, qui est contenue dans un header.

Je ne sais plus comment faire!!!
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
17 août 2009 à 18:25
Si le chemin que tu lui as indiqué est correct, cette ligne doit évidemment être mise dans le code de l'appellant (en tête du fichier stdafx.h)

---
VB.NET is good ... VB6 is better
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
pingosso Messages postés 10 Date d'inscription jeudi 6 août 2009 Statut Membre Dernière intervention 21 août 2009
19 août 2009 à 16:20
Merci.

Je n'ai pas trouvé la solution, mais c'est pas grave j'ai essayé de trouver autre chose, mais bon je me retrouve confronter à un autre problème:

Quand je déclare une structure en extern dans ma dll, elle me sort la même erreur de link en disant qu'il y a un problème de symbol extern!!!

Pourtant cette structure est déclarée dans un header qui est inclus dans la dll???!!!

Comprend plus rien lol
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
19 août 2009 à 18:17
Oui, tu mets toujours __declspec(dllexport) mais faut pas oublier que ça n'est valable uniquement quand tu compiles ta DLL, pas quand tu t'en sers dans un autre programme ! Tu dois donc faire comme ça :

- Dans les options de compilation du projet de la DLL, tu force la définition de _NOMDELADLL_DLL.

- Dans le header, tu mets ça en tête : de cette façon, si c'est lors de la compilation de la DLL, les symboles sont exportés, sinon ils sont importés.
#ifdef _NOMDELADLL_DLL
#define NOMDELADLL_API __declspec(dllexport)
#else
#define NOMDELADLL_API __declspec(dllimport)
#endif

---
VB.NET is good ... VB6 is better
0
pingosso Messages postés 10 Date d'inscription jeudi 6 août 2009 Statut Membre Dernière intervention 21 août 2009
20 août 2009 à 10:41
Ok Je vais essayé ça mais je ne vois pas vraiment ce que ça va changer.

En fait ce n'est pas l'exportation des fonctions de ma dll qui pose problème mais l'utilisation dans cette dll de structures externes.

Depuis hier j'ai progressé, mais il y a toujours un problème que je pense insoluble:

Ma Dll contient une seule fonction qui permet de retourner un float qui est la copie d'un float d'une structure externe.

Au final quand j'exécute la dll dans mon programme VB.NET, il n'arrive pas à lire le float que la Dll est censée retourner. Par contre si dans la Dll je lui dis de retourner 180, là ça marche. Mais pas avec une valeur d'une structure externe???!!!

En tout cas merci pour tes conseils. ça fait maintenant plus d'une semaine que j'y suis dessus, je vais essayer de voir si je ne peux pas faire autrement. J'ai vu que l'on pouvait utiliser les mapfile pour communiquer entre deux applis, mais bon moi j'ai besoin de temps réel et la je ne suis pas sur que ça soit assez rapide.

Merci encore, Si tu as d'autres solutions je suis preneur. Je teste ta solution ce matin et je te tiens au courant.

A+

Lo
0
Rejoignez-nous