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 :

Comment déployer une appli contenant des TClientDataSet ? [Non suivi]


Sujet :

C++Builder

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 55
    Points : 49
    Points
    49
    Par défaut Comment déployer une appli contenant des TClientDataSet ?
    Le Background :

    Lorsque l'on utilise des TClientDataSet quelque part dans l'application, on est tenu, pour pouvoir la déployer, soit d'inclure midas.dll dans le dossier du programme, soit d'inclure midaslib.dcu et crtl.dcu directement dans le source.

    Le problème :

    j'ai copié midas.dll sur le poste de test, ça à marché pendant un moment, j'ai fait d'autres tests, et maintenant plus rien... même avec midas.dll dans le même dossier ou dans windows/system ça renvoi l'erreur 'Error loading MIDAS.DLL"

    J'ai essayé d'inclure les libraries en les ajoutant au projet, mais je ne suis pas sûr que ça fonctionne. L'exe final fait la même taille...
    est-ce qu'il faut faire une autre manip ?

    Pourtant le problème a dù se poser pour pas mal de monde, dès qu'on utilise des ClientDataSet dans le programme... ( et pourtant j'ai fait une recherche mais je n'ai trouvé aucun sujet dessus concernant C++ Builder )

    J'ai lu plusieurs réponses instructives sur les forums Delphi et sur le net, mais invariablement concernant Delphi...
    En Delphi il faut ajouter une clause uses avec le nom des librairies et c'est bon...

    Autre particularité, les fichiers qu'on me demande d'ajouter sont en .dcu peut-etre "compiled unit" si j'ai bien compris...

    Merci de votre aide !
    mon projet est quasiment fini, c'est rageant de bloquer sur le déploiement !

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 55
    Points : 49
    Points
    49
    Par défaut
    bump-a-dumpa

    Peu de gens utilisent les ClientDataSet ? ils sont pourtant très simple à mettre en oeuvre au niveau du code et très legers. Seul défaut jusqu'à présent ce problème de déploiement...

    Merci d'avance

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 55
    Points : 49
    Points
    49
    Par défaut
    Je sais pas si ça interresse quelqu'un mais bon, je vais poster ici ce que j'ai trouvé, et j'espère un jour la solution au problème.

    En parcourant les newsgroups de Borland cppbuilder j'ai finalement trouvé un début de réponse.

    Le fichier d'aide est obsolète, il demande d'intégrer des .dcu ce qui n'est possible qu'avec Delphi, pas C++Builder.

    Le readme.txt accompagnant C++Builder contient d'autres infos pour creer une application standalone ( seulement un exe sans DLL à déployer ) utilisant les TClientDataSet.

    Il faudrait en fait utiliser l'un des pilotes de dbExpress, et enregistrer la librairie DataSnap.

    En fait les instructions proposées sont incomplètes ( erreurs de compil), mais toujours d'après un message du newsgroup, ça doit marcher en incluant :

    aux fichiers du projet:
    dbxdsnint.lib

    dans le header de main.h :
    #include <sqlexpr.hpp> //pour que RegisterDbXpressLib() marche
    #include <dbxdsnint.h> // pour le pilote interbase par exemple

    dans le constructeur de la form main:

    RegisterDbXpressLib(::getSQLDriverINTERBASE);
    RegisterMidasLib(:llGetDataSnapClassObject);


    voilà.
    Ca compile mais j'ai toujours le même message d'erreur au lancement de l'appli. ( error loading midas.dll )

    Je vais tester hyperbase, apparament une alternative à Midas...


    D'autre part, pour le comportement plutôt suspet de midas.dll, c'est en fait que lors de la première utilisation, elle s'enregistre auprès du registre avec son chemin courant.
    Si on efface le dossier, le chemin n'existe plus et même si l'on remet la dll dans /system ou dans le dossier de l'exe, ça ne fonctionnera pas.


    Galère !

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 55
    Points : 49
    Points
    49
    Par défaut
    Ok, bon finalement j'abandonne l'idée de l'executable tout en un. tant pis.

    Donc, toujours si par hasard ça interesse quelqu'un, j'installe midas.dll dans system32 et je force l'enregistrement au registre ( au cas où il y ait eu une installation+enregistrement+desinstallation avec suppression du dossier contenant la dll.)

    Pour info la clé de registre est la suivante :

    HKEY_CLASSES_ROOT
    \\CLSID\\{9E8D2FA1-591C-11D0-BF52-0020AF32BD64}\\InProcServer32

  5. #5
    Membre à l'essai
    Inscrit en
    Juillet 2005
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 23
    Points : 22
    Points
    22
    Par défaut
    bonjour,

    si tu veux installer la dll midas.dll dans un autre répertoire que ton application et que tu veux que ton application fonctionne,
    il faut que tu rajoute dans le Path de windows le chemin ou se trouve
    les dll utiliser pour ton projet, sinon tu récupère un message d'erreur
    comme quoi ton application ne trouve pas la dll

    Stéphane

  6. #6
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    regsvr32 midas.dll

  7. #7
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2005
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 218
    Points : 311
    Points
    311
    Par défaut
    Il suffit d'utiliser l'installshield fournit avec delphi et de joindre la midas.dll(faire un iwz), pas besoin de bidouiller dans la base de registre. Installshield permet ainsi en cas de désinstallation de laisser un système propre.
    DANGER!!!!!
    Par contre il est vivement conseillé, voir impératif d'inclure la dll midaslib à delphi 6 (pas possible à ma connaissance en Delphi 5) au projet car les versions de midas fournit avec delphi 5 et delphi 6 ne sont pas les mêmes et ont des différences de comportements notoires. On peut noter entre autre comme différence principale : la méthode Insert des cds (non lié à un Datasource, il me semble) fonctionne correctement avec la midas.dll de Delphi 6 alors qu'elle fonctionnait comme un append en Delphi 5. Suivant la façon de programmer cela entraine des différences de comportement, type chargement à l'envers d'une table. Il est donc vivement déconseillé de déployer midas.dll de delphi 6 car cela peut engendrer un disfonctionnement dans d'autres applications. A noter que les applications compilées avec Delphi 6 peuvent tout à fait utiliser la midas.dll de delphi 5, mais les CDS fonctionnent évidemment avec les mêmes comportements qu'une application compilée en DELPHI 5.
    Pour inclure la midaslib, il me semble qu'il n'y a qu'à l'inclure au niveau du dpr de l'application principale, voir peut-être de chaque bpl en cas d'application découpées en paquets(à vérifier).

Discussions similaires

  1. Réponses: 0
    Dernier message: 21/10/2013, 13h37
  2. Réponses: 0
    Dernier message: 21/11/2010, 21h06
  3. Réponses: 13
    Dernier message: 29/07/2009, 21h25
  4. Comment déployer une appli j2ee faite avec netbeans ?
    Par judas27 dans le forum NetBeans
    Réponses: 2
    Dernier message: 24/07/2007, 17h50
  5. Réponses: 3
    Dernier message: 09/02/2007, 17h20

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