Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2924 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  peut on exporter une structure définie dans une DLL

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

peut on exporter une structure définie dans une DLL

n°708770
giova
Posté le 26-04-2004 à 15:50:49  profilanswer
 

plus précisement j'ai définie une structure dans ma dll, et déclaré un tableau de cette structure. Tout ceci n'est pas exporté car je ne veux pas que l'on puisse modifier le contenu de l'exterieur.
 
 
je veux donc exporter une fonction qui :
1) alloue dynamiquement dans le tableau une "instance" de cette structure (malloc)
2) qui retourne l'adresse de ce tableau.
 
voici donc a quoi ressemble mon header :
 

Code :
  1. struct test
  2. {
  3. char* nom;
  4. int nombre;
  5. };
  6. extern "C" test* __declspec(dllexport) _stdcall Test(void);


 
mais le compilateur semble ne pas apprecier que je retourne un poiteur de type test puisqu'il me dit ceci :
 
warning C4518: '__declspec(dllexport ) ' : classe de stockage ou spécificateur(s) de type inattendu(es) ; ignoré(es)
 
du coup je me demande si c'est possible ou si c'est moi qui m'y prends mal.
 
quelqu'un a une idée sur la question?
 
PS: ma dll doit exporter les fonctions pour du C d'où le extern "C"
 

mood
Publicité
Posté le 26-04-2004 à 15:50:49  profilanswer
 

n°708853
SoWhatIn22
Posté le 26-04-2004 à 16:43:29  profilanswer
 

c'est toi qui t'y prends mal.
 
sans doute

Code :
  1. extern "C" struct test * __declspec(dllexport) _stdcall Test(void);


conviendrais mieux.
 
Et le extern "C" n'a rien à voir avec l'exportation de ta fonction. C'est le '__declspec(dllexport)' qui tient ce rôle.


Message édité par SoWhatIn22 le 26-04-2004 à 16:44:22
n°708893
giova
Posté le 26-04-2004 à 16:58:21  profilanswer
 

oui je voulais dire vu que c'est pour du C ANSI :)
 
j'ai essayé t modif , ca ne change rien pour l'instant au niveau des warning affichés par le compilateur, cela dit ta syntaxe est tres certainement bien plus proche de la réalité que la mienne .


Message édité par giova le 26-04-2004 à 16:58:39
n°709263
giova
Posté le 27-04-2004 à 01:29:45  profilanswer
 

tant de personnes qui lisent mon poste et si peu de réponse, je ne sais pas quoi en conclure, idée de cinglé, stade tres avancé, je lance un "Hmmm"  a la bart simpsons quand il est découragé :)

n°709299
SoWhatIn22
Posté le 27-04-2004 à 08:32:06  profilanswer
 

question bête: c quoi ton compilo?

n°709458
giova
Posté le 27-04-2004 à 10:59:32  profilanswer
 

bah j'utilise visual C++ 2003

n°709877
giova
Posté le 27-04-2004 à 16:11:42  profilanswer
 

c'est bon on m'a répondu dans un newsgroup.
 
en fait il faut lorsque c'est défini dans le header, placer  
__declspec(dllexport) avant le type de sortie de la fonction, ce qui donne donc :  
 
extern "C" __declspec(dllexport) test* _stdcall Test(void);  
 
et dans le cpp la définition devient donc :  
 
 
test* _stdcall Test(void)
{
 
}
 

n°710710
giova
Posté le 28-04-2004 à 12:29:09  profilanswer
 

Pour info, SoWhatIn22 a raison, si l'on ne précise pas que le type de retour est une structure, ca ne pose pas de PB sous visual qui sait faire le lien (mais le fait il a la sauce CPP? mistere), en revanche sous CVI qui est un compilateur C ANSI, lui ne reconnais pas le type.
donc pour eviter tout probleme la meilleur synthaxe est :  

Code :
  1. __declspec(dllexport) struct test* _stdcall Test(void);


Message édité par giova le 28-04-2004 à 12:30:08
n°710742
christophe​_d13
L'efficacité à tout prix.
Posté le 28-04-2004 à 13:06:52  profilanswer
 

Une question ?
 
L'appelant de la DLL, il a accès à la définition de ta structure ?

n°710788
giova
Posté le 28-04-2004 à 13:44:03  profilanswer
 

oui biensur puis qu'elle est faite dans le header de la dll (voir mon premier post sur ce topic), autrement dit la partie visible vis a vis du client.
 
EDIT : client = l'appellant


Message édité par giova le 28-04-2004 à 13:46:55
mood
Publicité
Posté le 28-04-2004 à 13:44:03  profilanswer
 

n°711253
christophe​_d13
L'efficacité à tout prix.
Posté le 28-04-2004 à 19:07:20  profilanswer
 

Alors il ne te reste qu'à faire une fonction qui fait une copie de ta structure lorsque l'appelant la demande. N'oublie qu'il faudra également détruire cette copie de structure...

n°711448
giova
Posté le 29-04-2004 à 01:02:32  profilanswer
 

bah non (enfin si tu veux oui pourquoi pas mais c con de le faire ca fait une recopie inutile) le mieux c de travailler avec des pointeurs.
 
tu crée un pointeur sur ce type de structure dans ton code client et tu le balance en parametre a la fonction qui travaille directement dessus.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  peut on exporter une structure définie dans une DLL

 

Sujets relatifs
probleme de nom décoré DLL C (résolu)Enregistrer et lire une structure dans un fichier
enregistrer une structure contenant des bitmaps(D6) Serveur COM (DLL) et allocation de mémoire
[C++] recherche tutorial COMPLET et SERIEUX sur DLL win32surcharge de fonctions dans une dll classique, help plz
ranger une structure dans un tableauMSXML ne reconnaît pas la structure de mon document...
charger decharger dllstructure d'un projet dans CVS
Plus de sujets relatifs à : peut on exporter une structure définie dans une DLL


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)