peut on exporter une structure définie dans une DLL - C++ - Programmation
Marsh Posté le 26-04-2004 à 16:43:29
c'est toi qui t'y prends mal.
sans doute
Code :
|
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.
Marsh Posté le 26-04-2004 à 16:58:21
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 .
Marsh Posté le 27-04-2004 à 01:29:45
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é
Marsh Posté le 27-04-2004 à 16:11:42
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)
{
}
Marsh Posté le 28-04-2004 à 12:29:09
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 :
|
Marsh Posté le 28-04-2004 à 13:06:52
Une question ?
L'appelant de la DLL, il a accès à la définition de ta structure ?
Marsh Posté le 28-04-2004 à 13:44:03
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
Marsh Posté le 28-04-2004 à 19:07:20
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...
Marsh Posté le 29-04-2004 à 01:02:32
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.
Marsh Posté le 26-04-2004 à 15:50:49
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 :
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"