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

Visual C++ Discussion :

[COM] utiliser la librairie standard dans une dll COM


Sujet :

Visual C++

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 646
    Points : 240
    Points
    240
    Par défaut [COM] utiliser la librairie standard dans une dll COM
    Bonjour,

    Voici une classe (Je n'ai mis que ce qui me pose probleme, sinon j'initialise bien srand...):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class MaClasse{
    }
     
    // .cpp
    #include "stdlib.h"
    MaClasse::MaClasse()
    {
    	long a;
    	a = rand()%10;
    }
    Lorsque j'inclus et utilise cette classe dans un projet console win32, aucun probleme, ca compile et ca marche.

    Mais si j'essaye de la compiler dans un projet COM, la ca ne compile plus:
    J'ajoute bien le .h/.cpp au projet, j'ai essaye en ajoutant stdafx.h ou en n'utilisant pas de precompiled header.
    Je n'ai rien vu qui m'ai choque dans les settings.

    Si je compile comme ceci j'obtiens:
    Creating library ReleaseMinSize/COMTest.lib and object ReleaseMinSize/COMTest.exp
    LIBCMT.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
    ReleaseMinSize/COMTest.dll : fatal error LNK1120: 1 unresolved externals
    Si je commente l'appel a rand(), ca compile sans probleme...
    C'est uniquement quand je fais l'appel a rand() qu'il cherche un main.
    Et du coup, je suis un peu bloque.
    Pourtant je suis parti de zero, le projet est quasi vide, j'ai pas modifier les settings(PS: c'est du COM sans MFC, et les source je les ai tester en console compile sans probleme)...

    Si vous pouviez eclairer ma lanterne .
    Merci

  2. #2
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 381
    Points
    20 381
    Par défaut
    Jouer sur "use Runtime Library" sur single threaded/multithreaded...dans l'onglet C/C++ code generation

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 646
    Points : 240
    Points
    240
    Par défaut
    Yes merci, ca marche avec MultiThread DLL.
    C'est cool par contre ces warnings sont apparus:
    StdAfx.cpp
    C:\Program Files\Microsoft Visual Studio\VC98\ATL\INCLUDE\atlimpl.cpp(115) : warning C4273: 'malloc' : inconsistent dll linkage. dllexport assumed.
    C:\Program Files\Microsoft Visual Studio\VC98\ATL\INCLUDE\atlimpl.cpp(143) : warning C4273: 'calloc' : inconsistent dll linkage. dllexport assumed.
    C:\Program Files\Microsoft Visual Studio\VC98\ATL\INCLUDE\atlimpl.cpp(148) : warning C4273: 'realloc' : inconsistent dll linkage. dllexport assumed.
    C:\Program Files\Microsoft Visual Studio\VC98\ATL\INCLUDE\atlimpl.cpp(166) : warning C4273: 'free' : inconsistent dll linkage. dllexport assumed.
    Compiling...
    Je suis en train de chercher pour voir ce que c'est.
    J'ai essaye de commenter le #include <atlimpl.cpp> dans le stdafx.cpp, forcement plus de warning, mais je sais pas si c'est good(et si c'est bien de le faire). Il faut encore que je fasse des tests.

    Pour info, je suis sous Visual C++ 6.0(il me semble que dans le 2005, y a une difference mais sais plus laquelle).

    En tout cas, j'avance, danke Mat!

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Je viens de reproduire le problème. C'est bizarre, il n'apparait qu'en Release...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Bon, j'ai trouvé: Si tu retires l'option /D _ATL_MIN_CRT dans les options du préprocesseur, ATL utilisera la CRT normale au lieu de "son truc perso", et l'édition de liens marchera.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 646
    Points : 240
    Points
    240
    Par défaut
    Yep, c'est cool
    Moi je suis tomber sur des site qui parlait de _ATL_STATIC_REGISTRY ou meme de AFXDLL, j'ai tester ca a pas corrige. je suis un le bon etait juste a cote(meme pas pense a l'enlever).

    Merci Médinoc

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Utilisation d'icônes standard dans une barre d'outils
    Par chrtophe dans le forum Débuter
    Réponses: 11
    Dernier message: 12/12/2011, 19h06
  2. Utilisation d'interop a travers une dll Com
    Par Dadedi dans le forum C#
    Réponses: 0
    Dernier message: 01/10/2009, 10h57
  3. Utilisation d'un Thread dans une DLL
    Par colorid dans le forum Langage
    Réponses: 7
    Dernier message: 14/03/2009, 11h05
  4. Utilisation d'un activex dans une dll mfc
    Par regdobey dans le forum MFC
    Réponses: 2
    Dernier message: 20/11/2008, 13h19
  5. Réponses: 3
    Dernier message: 18/09/2007, 14h54

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