IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

TTimer dans une dll utilisée par une application .net


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    229
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 229
    Par défaut TTimer dans une dll utilisée par une application .net
    Bonjour,

    j'ai une dll écrite en C++ builder qui utilise un TTimer.
    Cette dll est utilisée par 2 applications, une en c++ builder et une en .net
    Le TTimer se déclenche correctement dans cette première application en C++ builder mais pas dans celle en .net
    Quelqu'un a t'il une idée du problème ? Peut être vaut il mieux que j'utilise un timer non issu de la VCL ?
    Merci d'avance !

    Pascale38

  2. #2
    Membre éclairé
    Homme Profil pro
    Consultant technique
    Inscrit en
    Juillet 2002
    Messages
    519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2002
    Messages : 519
    Par défaut
    Bonjour,

    Je pense que c'est difficile de répondre à ce type de question sans plus de précision.
    Il faudrait voir comment est déclaré la fonction qui utilise le timer et comment elle est appelée par les programmes.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    229
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 229
    Par défaut
    Oui c'est sûr !!

    Dans mon .cpp (car utilisé par des fonctions membres et non membres du fichier .cpp (c'est peut être ça le problème) je déclare mon timer :

    Dans le constructeur de la classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    	TimerCom = new TTimer(NULL);
    	TimerCom->Interval = 5000;
    	TimerCom->OnTimer = TimerComTimer;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    void __fastcall TMicroLink::TimerComTimer(TObject * Sender)
    {
    	TimerCom->Enabled = false;
    	...
    }
    Dans le .h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    private:
    	void __fastcall TimerComTimer(TObject *Sender);
    Si c'est l'appli en C++ builder qui lance la dll, tout se passe bien, si c'est l'appli en .net, on ne passe jamais dans la fonction TimerComTimer

    Est ce que ça aide ??
    merci :-)
    Pascale38

  4. #4
    Membre éclairé
    Homme Profil pro
    Consultant technique
    Inscrit en
    Juillet 2002
    Messages
    519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2002
    Messages : 519
    Par défaut
    Tout d'abord, il ne faut pas oublier de faire le delete. Surement dans le destructeur. Sinon, il y aura une fuite de mémoire.

    Ensuite, je ne suis pas un expert en dll mais il me semble qu'il y a une syntaxe à utiliser pour indiquer ce qui est utilisable en dehors de la dll avec le mot dllexport.
    De même, il y a un dllimport dans le programme qui l'utilise.

    Donc, ce qu'il faudrait ce serait plutôt voir comme tout celà est exporté et importé par les différents programmes.
    Car si la dll est réalisé en c++Builder, il n'y a pas de problème pour l'utilisation avec C++Builder puisqu'ils utilisent par défaut le même moyen de déclaration de la fonction (avec un __fastcall).
    Il me semble qu'il faut préciser correctement avec l'autre programme comme on accède aux éléments de la dll.

    Il faudrait que quelqu'un qui connaisse mieux .net et les dll te renseigne. Mais je pense que tu peux partir sur cette piste.

  5. #5
    Membre Expert
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Billets dans le blog
    1
    Par défaut
    pour utiliser ta dll avec du .Net ou du Viual C++ du dois exporter la fonction de ta dll de la manière suivante
    les conventions d'appels ne sont pas identique entre Borland et MS

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    extern "C" void __stdcall __declspec(dllexport) Tafonction()
    pour vérifier le bon fonctionnement de l'exportation tu peux utiliser
    Impdef ou Implib

    cdlt
    vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les règles du forum

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    229
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 229
    Par défaut
    Bonjour,

    bien sûr qu'il y a un delete, je ne l'ai pas mis car pas pertinent pour mon problème.
    Ensuite les fonctions utilisées par lzs applications appelantes sont bien déclarées avec dllexport,
    le problème n'est pas là, le timer lui n'est utilisé que par des fonctions de la dll qui ne sont pas exportées.

    Merci pour ton aide.
    Pascale38

  7. #7
    Membre Expert
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Billets dans le blog
    1
    Par défaut
    Salut
    le problème que tu décrit est il également présent avec une application Non Managée
    de type Visual C++;
    si oui tu a un problème dans l'exportation des fonctions de ta DLL (convention d'appel , Underscore devant le nom de la fonction, nameManbling)

    autre possibilité : Utilise tu le chargement dynamique de la DLL ou une importation statique?

    un simple dll export sans le préfixer "C" va générer du manbling @@@Tafunction()
    naturellement ca fonctionne avec C++ Builder en importation statique
    cdlt
    vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les règles du forum

Discussions similaires

  1. Réponses: 8
    Dernier message: 18/02/2016, 04h56
  2. DLL utilisées par une application Qt
    Par black_hole dans le forum Débuter
    Réponses: 2
    Dernier message: 15/01/2013, 10h43
  3. Réponses: 4
    Dernier message: 02/12/2011, 14h52
  4. Utilisation d'une dll native par une toolbar managée
    Par didierll dans le forum C++/CLI
    Réponses: 1
    Dernier message: 10/07/2007, 07h56
  5. Réponses: 1
    Dernier message: 01/11/2005, 02h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo