Se connecter avec
S'enregistrer | Connectez-vous

probleme dll retour parametre

Dernière réponse : dans Programmation

Bonjour,

je vous explique mon problème.
J'ai fait une dll en C/C++ pour appeler une dll fortran (ce qui n'est pas très logique vous allez me dire mais si).
Mon but est de loader cette dll fortran dans scilab pour utiliser une de ses fonction et j'avais besoin d'une interface pour convertir les types de donnes. Je l'ai faites en C, non pas que je maitrise, mais plus que le fortran lol.

J'ai donc réussi a créer cette dll, qui marche (presque) niquel, sauf un truc, le retour :

extern "C" void __declspec (dllexport) call_dll(int * N1, int* N2, double* N3, double* N4, double* N5)

Elle marche, il n'y a pas de souci, je peux l'appeler, mais pas récupérer de valeurs (normal c'est un void)

Donc je réécrit mon code et je déclaire ma fonction comme ca :

extern "C" double** __declspec (dllexport) call_dll(int * N1, int* N2, double* N3, double* N4, double* N5)

Ca compile pas de problème, par contre, lors de la création de la dll, il n'exporte pas la fonction call_dll... Il ne créee pas de méthode utilisable

La seule chose que j'ai modifié, c'est bien sur le retour.

Ma question : ne peut on pas renvoyer de pointeur (et encore moins un pointeur de pointeur) depuis une dll ?
Enfin si quelqu'un voit d'ou ca peut venir, je suis preneur :) 

Merci
Kokocha

Autres pages sur : probleme dll retour parametre

Lassé par la pub ? Créez un compte

ben je peux pas l appeler dans mon projet appelant, puisque la quand il me la compile, il ne m exporte pas de fonction...

stu ve le .def qui est généré lors de la compilation avec le "void" donne :

; dlltool --base-file C:\Temp/cca03924.base --output-exp call_dll.exp --dllname call_dll.dll --output-def libcall_dll.def --exclude-symbol=DllMainCRTStartup@12 --def C:\Temp/cca03924.def --output-lib libcall_dll.a
EXPORTS
call_dll @ 1 ;

et avec le "double**"
; dlltool --base-file C:\Temp/cca03664.base --output-exp call_dll.exp --dllname call_dll.dll --output-def libcall_dll.def --exclude-symbol=DllMainCRTStartup@12 --def C:\Temp/cca03664.def --output-lib libcall_dll.a
EXPORTS

Donc bon au début je me suis dit c'est peut être juste le .def qui a été mal "écrit" donc j'ai appelé ma dll comme avant, mais la scilab me dit qu'il n'y a pas de point d'entrée nommé call_dll... Donc j'en ai déduit qu'il n'avait pas exporté la méthode.

Et la seule chose qui a changé c'est le retour de la méthode (double** au lieu de void) et bien entendu le return all qui est un double** ...

Maintenant je ne dis pas que le problème vienne pas d'ailleurs, mais je ne vois pas d ou puisque ca marche avec le void ...

Kokocha
Lassé par la pub ? Créez un compte