youppyy
Messages postés7Date d'inscriptionjeudi 4 juin 2009StatutMembreDernière intervention24 décembre 2009
-
27 nov. 2009 à 22:22
youppyy
Messages postés7Date d'inscriptionjeudi 4 juin 2009StatutMembreDernière intervention24 décembre 2009
-
24 déc. 2009 à 23:00
Bonjour,
J'ai deux fonctions sont enregistrées dans une dll ecrite en langage C sur Dec-c++ :
J'ai une fonction A qui renvoie une donnée et une fonction B qui appelle la fonction A, et ecrit la donnée renvoyée dans un fichier .txt.
Le fichier .h ressemble à ça :
#include <stdio.h>
#include <string.h>
#include <windows.h>
#define export __declspec(dllexport)
int méthode_A();
export int __stdcall méthode_B(paramètres pris par la fonction);
D'autre part, j'ai un module vba-Excel. Je souhaite pouvoir appeler la méthode B dedans via la dll.
Public Declare Sub méthode_B Lib "madll.dll" (paramètres)
Sub test()
Call méthode_B(paramètres que je lui passe)
End Sub
Le but est qu'en exécutant ce code, le fichier texte se crée avec la donnée (générée par la méthode A) dedans.
Cependant, ce qui arrive est que le fichier se crée mais reste vide.
J'ai testé les méthodes C séparemment et le problème ne vient pas de ces méthodes.
Je pense qu'il y a une erreur dans la liaison dll-module vba, mais je n'arrive pas à savoir laquelle. C'est la première fois que j'utilise une dll.
Est ce que par exemple il faut que j'exporte la méthode A même si je ne l'appelle directement pas dans le module vba?
Voyez vous une autre erreur sinon?
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 27 nov. 2009 à 23:51
Si Excel ne hurle pas c'est qu'il a bien trouvé la fonction dans la dll.
Ce qui n'est pas appelé de l'extérieur n'a pas à être exporté.
J'ai fait des tas d'exemples de DLL pour VB, toutes testées depuis Excel. Voir ici sur cppfrance et sur vbfrance.
youppyy
Messages postés7Date d'inscriptionjeudi 4 juin 2009StatutMembreDernière intervention24 décembre 2009 28 nov. 2009 à 10:23
Je n'ai pas appelé la méthode A de l'extérieur. Donc oui, comme tu le dis elle n'a pas été exportée. Mais j'ai pas besoin qu'elle le soit, si?
Je veux dire : Est ce qu'il faut que je l'exporte pour pouvoir utiliser la méthode B (vu que B appelle A) ?
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 201413 29 nov. 2009 à 13:22
Salut,
Tu peux montrer les signatures complètes (paramètres) que ce soit en C et en VB ? Déjà on voit que la fonction C renvoie un int alors que sous VB tu déclares une procédure, donc sans valeur de retour (Ce n'est cependant pas la cause de l'erreur non plus).
youppyy
Messages postés7Date d'inscriptionjeudi 4 juin 2009StatutMembreDernière intervention24 décembre 2009 24 déc. 2009 à 21:18
Bonjour,
Afin de trouver la source du problème, j'ai essayé de faire un test : J'ai voulu voir si l'entier passé en paramètre dans la sub VBA est bien reçu par la méthode C. J'ai voulu donc écrire dans un fichier la valeur de ce paramètre et justement, ce n'est pas le bon nombre qui est écrit.