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 :

new TTable() provoque exception Kernel32 ! [Base de donnée]


Sujet :

C++Builder

  1. #21
    Membre habitué

    Inscrit en
    Février 2007
    Messages
    250
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Février 2007
    Messages : 250
    Points : 162
    Points
    162
    Par défaut
    Si je remet le code laissé ici que j'avais supprimé (avec DbInit, etc), je ne peux plus linker, il me manque une lib je pense, il me manque sprintf, libc ou un truc du genre.... Et l'aide de Borland n'indique pas, pour chaque fonction, dans quelle lib elle est présente....
    Bon, remplacé par AnsiString.printf et ça passe.
    L'accès à Session->ConfigMode fait planter le programme.(code commenté dans le code donné dans le message précédent)

  2. #22
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 630
    Points : 25 333
    Points
    25 333
    Par défaut
    Tu as fait tes propres GetStringUTFChars, tu reproduis JNI dans ton executable de Test ? OK, un peu de la bidouille mais je comprends la démarche !

    Personnellement, j'aurais fais les fonctions export en C, pour être appelé comme une API C avec Borland et MinGW, ainsi tu peux apprécier le comportement avec deux environnements, tu maitrîse pleinement les types char*, int, ... et donc GetMem et FremMem associé !

    Ensuite, une fois que cela fonctionne, j'aurais encapsuler ces export C dans des function wrapper pour JNI

    sinon, si tu veux utiliser des AnsiString comme m_strLastError
    tu peux remplacer sprintf par Format et la macro ARRAYOFCONST((...))
    sinon sprintf, c'est dans <stdio.h> faut penser à le mettre en include !
    dans mon projet, j'ai une chier d'include
    $(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;...
    Je ne suis pas développeur C++ depuis longtemps, j'ai encore un peu de mal avec la liaison C++ qui est assez étrange par rapport à la simplicité de Delphi

    euh, tu n'as pas une inversion déclaration\appel ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DBIResult dbiResult = DbiInit(NULL);
    dbiResult = DBIERR_NONE;
    devrait être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DBIResult dbiResult = DBIERR_NONE;
    dbiResult = DbiInit(NULL);
    ou simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DBIResult dbiResult = DbiInit(NULL);
    Ah, sacré BDE !
    Je me rappele de truc en delphi genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Application.Handle := hHandle;
    GlobalDataModule := TDataModule.Create(Application);
    hHandle étant un paramètre à une function Initialization d'une DLL, mais je crois qu'avec HInstance cela peut aussi fonctionner !
    Ainsi que GetModuleHandle(NULL)

  3. #23
    Membre habitué

    Inscrit en
    Février 2007
    Messages
    250
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Février 2007
    Messages : 250
    Points : 162
    Points
    162
    Par défaut
    Ne te prend pas la tête avec les lib et les includes, c'est bon.
    Le code est du code "bordel" de test, normal qu'ily ait des trucs bizarres...
    Oui, en effet c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DBIResult dbiResult = DbiInit(NULL);
    j'avais remis à pas d'erreur dans des tests, mais ça retourne bien OK.
    Et essaye de vérifier l'objet TSession ! Open, Close, GetConfigMode ... tant que ces méthodes ne fonctionne pas toutes, ce n'est pas la peine d'aller plus loin !
    As-tu ajouté un TDataModule et un TDataBase utilisé comme Owner de ton TTable comme je te l'avais conseillé ?
    Est-ce que DbiInit fonctionne correctement ?
    dans BDE.hpp, tu as toutes les déclarations BDE, normalement, pas de AnsiString, donc pas besoin de BordelMM.dll !
    J'ai créé un TDataModule mais ça ne change rien, et si je fais
    new T
    Par contre,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TSession *pMySession = new TSession(g_pDataModule);
    me créé bien une nouvelle session je peux donc voir dans mon code deux sessions... mais si j'accède à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pMySession->ConfigMode.Contains(cfmVirtual)
    ça plante...
    C'est donc la création de la session qui merde, ça doit utiliser un truc non initialisé !

  4. #24
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 630
    Points : 25 333
    Points
    25 333
    Par défaut
    Pense à nommer la Session ! SessionName
    Après, je n'ai jamais trop fouillé cet objet, je l'affectais à mon TDataBase, ce dernier me permettait de créer mes TTable sans soucis !
    Mais j'étais en objet COM avec Delphi, le contexte mémoire est peut-être différent (surtout la méthode de chargement)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    TSession *pMySession = new TSession(NULL);
    pMySession->SessionName = "Session" + IntToStr(gSessionCount);
    pMySession->Open(); // raise EDBEngineError
    ...
    if (pMySession->ConfigMode.Contains(cfmVirtual)) ...
    ...
     
    g_pDataModule = new TDataModule(NULL); // NULL ou Application ???
    g_pDataModule->DataBase->SessionName = pMySession->SessionName;
     
    m_pTable = new TTable(g_pDataModule);

  5. #25
    Membre habitué

    Inscrit en
    Février 2007
    Messages
    250
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Février 2007
    Messages : 250
    Points : 162
    Points
    162
    Par défaut
    pMySession->Open() crash et catch(EDBEngineError &_rDbEngineError) ne fait rien

  6. #26
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 630
    Points : 25 333
    Points
    25 333
    Par défaut
    Tout le problème est là, c'est évident !
    Dans le genre, ça se pose là !

    catch(Exception *e) ou catch(...), ne donne rien non plus ?
    Est-ce que OnStartup se produit ?

  7. #27
    Membre habitué

    Inscrit en
    Février 2007
    Messages
    250
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Février 2007
    Messages : 250
    Points : 162
    Points
    162
    Par défaut
    Pas réussi à cabler le OnStartup !
    J'ai écris ce code la :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    __try
    {
        pMySession->Open(); // raise EDBEngineError
    }
    __except(EXCEPTION_EXECUTE_HANDLER)
    {
        m_strLastError.printf("Exception Code = %X",GetExceptionCode());
        return;
    }
    La fonction retourne l'erreur : Exception Code = EEDFADE
    Je peux enfin catcher l'exception mais ça ne m'indique pas grand chose.

  8. #28
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 401
    Points : 578
    Points
    578
    Par défaut
    Et tu arrives à accéder à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pMySession->ConfigMode.Contains(cfmVirtual)
    si ta DLL est appelée depuis un exe Builder ??

    Ça me fait penser à un déphasage entre des fichiers include et les librairies/composants (comme par exemple quand tu installes une nouvelle version d'un composant sans mettre à jour les .h correspondants: il arrive bien à créer les objets, mais quand tu accèdes aux membres il perd les pédales)
    (En même temps ça m'étonnerait vu qu'un exe classique qui utilise des TTable semble fonctionner chez toi, non ?)

  9. #29
    Membre habitué

    Inscrit en
    Février 2007
    Messages
    250
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Février 2007
    Messages : 250
    Points : 162
    Points
    162
    Par défaut
    J'ai exécuté le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    AnsiString strGlobal;
    class MyObject : public TObject
    {
    public:
        void __fastcall MyOnStartup(System::TObject* _pSender)
        {
            strGlobal = "reached !";
        }
    };
     
    void CParadoxDatabase::CheckDatabaseEngineStart()
    {
        AnsiString strFormat;
     
        if (g_pDataModule == NULL)
        {
            m_strLastError += "module == NULL";
        }
        else
        {
            m_strLastError += "module != NULL";
        }
     
        if (!m_bInitDatabaseDone)
        {   // Ask the operating system to allow up to 68 file handles (this is a
            // Requirement of BDE)
            int iHandlesWanted    = 68;
            int iHandlesAvailable = SetHandleCount(iHandlesWanted);
     
            if (iHandlesAvailable < iHandlesWanted)
            {
                strFormat.printf("Cannot initialize database engine: cannot allow %d handles, only %d avalaible",iHandlesWanted,iHandlesAvailable);
                m_strLastError += strFormat;
            }
            else
            {
                DBIResult dbiResult = DbiInit(NULL);
                // initializing the driver
                if (dbiResult != DBIERR_NONE)
                {
                    strFormat.printf("Cannot initialize database engine: DbiInit failed (return error code: %d )!",(int) dbiResult);
                    m_strLastError += strFormat;
                }
                else
                {
                    m_strLastError += "Bde Intalled !! -";
    //TApplication *pApplication = new TApplication(NULL);
    //TDataModule
    MyObject *myO = new MyObject();
    TSession *pMySession = new TSession(NULL);
    pMySession->SessionName = "Session" + IntToStr(Sessions->Count);
    pMySession->OnStartup = myO->MyOnStartup;
     
    __try
    {
        pMySession->Open(); // raise EDBEngineError
    }
    __except(EXCEPTION_EXECUTE_HANDLER)
    {
        m_strLastError.printf("-%s- Exception Code = %X",strGlobal.c_str(),GetExceptionCode());
        return;
    }
     
        m_strLastError += "!!! OK !!!";
    }
    CParadoxDatabase::CheckDatabaseEngineStart() est appelé par l'appel de la DLL.
    La chaine retournée est : "-reached !-Exception Code = EEDFADE" ce qui laisse supposer que l'on entre bien dans la méthode OnStartup mais ça crash après.
    Tout accès à ConfigMode fait planter l'application.
    Le type retourné par ConfigMode est de type typedef Set<TConfigModes, cfmVirtual, cfmSession> TConfigMode;. N'y a-t-il rien à configurer pour faire fonctionner les maps et les sets ? Genre une callback d'init ?

  10. #30
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 401
    Points : 578
    Points
    578
    Par défaut
    Et comme ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    try
    {
        pMySession->Open(); // raise EDBEngineError
    }
    catch(Exception& e)
    {
        m_strLastError.printf("Exception Code = %s",e.Message.c_str());
    }
    (Juste comme ça, j'ai eu qq soucis avec des return à l'intérieur des blocs try et catch...)

  11. #31
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 630
    Points : 25 333
    Points
    25 333
    Par défaut
    OnStartup est un TNotifyEvent (classes.hpp)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef void __fastcall (__closure *TNotifyEvent)(System::TObject* Sender);
    CParadoxDatabase doit hérité de TObject (je pense que __closure l'impose, je n'ai jamais vérifié)
    En delphi, une méthode de classe (équivalent de static) peut-être utilisé comme Gestionnaire d'Evènement en C++, je ne sais pas !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void __fastcall CParadoxDatabase::MySessionStartupEventHandler(TObject *Sender)
    {
      if (Sender != pMySession)
        throw Exception("BOOM"); 
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    __try
    {
      pMySession->OnStartup = MySessionStartupEventHandler;
      pMySession->Open(); // raise EDBEngineError
    }
    __except(EXCEPTION_EXECUTE_HANDLER)
    {
        m_strLastError.printf("Exception Code = %X",GetExceptionCode());
        return;
    }
    EDIT : Le temps que je tape, tu as fini par trouver OnStartup !


    Pour typedef Set<> tant que tu t'amuse pas avec "#pragma option push -b" qui changerait la taille de l'énumération, il n'y a rien à faire !
    tu n'as pas modifié "Enumérion de Taille Entière" dans les options de compilations générales C++ ?
    Semble que cela change entre les versions (ou à force de jouer mon prédecesseur à modifier les options par défaut)
    BCB6 : Par défaut -b- (plus petit)
    BSD2007 : Par défaut -b (forcé int)

  12. #32
    Membre habitué

    Inscrit en
    Février 2007
    Messages
    250
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Février 2007
    Messages : 250
    Points : 162
    Points
    162
    Par défaut
    Citation Envoyé par totoche76 Voir le message
    Ça me fait penser à un déphasage entre des fichiers include et les librairies/composants (comme par exemple quand tu installes une nouvelle version d'un composant sans mettre à jour les .h correspondants: il arrive bien à créer les objets, mais quand tu accèdes aux membres il perd les pédales)
    (En même temps ça m'étonnerait vu qu'un exe classique qui utilise des TTable semble fonctionner chez toi, non ?)
    Ce n'est pas cela car tout le code est embarqué dans la DLL..
    Sous Borland C++ builder, chargé à partir de cet exe ça plante aussi...
    Les deux plantent de façon identiques (les deux exe Borland et MinGW) ce qui serait presque rassurant...

  13. #33
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 401
    Points : 578
    Points
    578
    Par défaut
    Ce n'est pas cela car tout le code est embarqué dans la DLL..
    Sous Borland C++ builder, chargé à partir de cet exe ça plante aussi...
    Le truc que j'évoque, c'est qq chose qui peut arriver quand tu compiles un exe: tu as un .bpl ou un .lib d'une certaine version d'un composant, et le .h d'une version précédente. Par exemple version 1 du composant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class TTest: public TObject
    {
    public:
      int mValeur;
      void __fastcall Afficher(void);
    ....
    };
    version 2 du composant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class TTest: public TObject
    {
    public:
      int mValeur;
      int mToto;
      void __fastcall Afficher(void);
    ....
    };
    Imagines que tu installes la v2, mais que tu conserves le.h de la v1. Puis tu compiles qq chose qui contient un appel à TTest::Afficher. En gros il va s'attendre à trouver Afficher en 2ème position dans la classe. Hors pour le composant, en 2ème position, c'est mToto, donc boum....
    C'est le même problème si tu compiles bien avec la dernière version du .h, mais que dans tes chemins de bibliothèque traînent toujours une version précédente du composant... (et ça c'est du vécu...)

    Est-ce qu'un exe tout bête utilisant Paradox fonctionne ?

  14. #34
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 630
    Points : 25 333
    Points
    25 333
    Par défaut
    Ton exe en MinGW que tu indiques comme programme de lancement pour le debug de la DLL ?

    Je pense que Totoche évoquait un TTable directement dans :
    - Exe C++Builder
    - DLL C++Builder appeler via Exe C++ Builder
    et non en mode Debug ou mode Réel !

    Maintenant 0EEDFADE = PAS_EXCEPT_CODE = cDelphiException
    Donc "catch(Exception *e)" devrait fonctionner !

    le type set de Delphi, c'est juste un tableau de bit, le type Set<> c'est une template qui gère un tableau de bit, je ne sais pas trop comment les types Delphi sont converti en types C++, mais la conversion est à l'intérieur de DLL, je pense que c'est un cast sauvage, tu as une zone mémoire, le template est conçu pour se coller dessus !

    C'est le même principe pour les strings, ça se colle dessus, c'est le compilateur qui fait tout le boulot, le type string gère un char* ce qui est plus complexe qu'un char[] (du Set<>)

    la particularité du AnsiString (D7), c'est que l'on alloue un pointeur de 8+LenStr+1+?
    8 = pour Compteur et Longueur
    LenStr = nombre de char
    1 = pour le zéro terminal
    ? = 0 ou 1 pour allouer un zone mémoire paire (bidouille pour Wide)

    Hors, ce que l'on échange c'est le pointeur sur la chaine et non le pointeur vraiment alloué, un gros délire en soit mais qui permet le transtypage en PChar

  15. #35
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 401
    Points : 578
    Points
    578
    Par défaut
    Les deux plantent de façon identiques (les deux exe Borland et MinGW) ce qui serait presque rassurant...
    En effet ça donne quelque chose de cohérent !

    Donc le nouvel objectif ce serait d'arriver à faire tourner ce truc simple en apparence dans un EXE C++ Builder (sans même causer de DLL), puis si cela marche d'arriver à le faire dans un EXE C++ Builder + DLL C++ Builder, non ?
    Après on pourra s'amuser avec MinGW, mais si déjà la base de la base déconne...

  16. #36
    Membre habitué

    Inscrit en
    Février 2007
    Messages
    250
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Février 2007
    Messages : 250
    Points : 162
    Points
    162
    Par défaut
    J'ai 15 ans d'expérience en C++ et je connais bien ces problèmes de .h déphasé par rapport aux lib...
    Toutefois, le code déplacé dans un EXE fonctionne, ce qui ne serait pas le cas si les .h n'étaient pas à jour.
    Problème de dll ? Je ne sais pas quelles dll il utilise mais j'ai linké le maximum en statique, faisant passer ma dll de 64ko à 620ko, donc là, plus de problèmes de versions de dll.
    "catch(Exception *e)" ne fonctionne pas !
    De plus je viens d'installer il y une semaine le Borland C++ Builder donc l'install est neuve !
    J'avoue que je suis impuissant face à ce problème, je ne sais plus quelle piste chercher...

  17. #37
    Membre habitué

    Inscrit en
    Février 2007
    Messages
    250
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Février 2007
    Messages : 250
    Points : 162
    Points
    162
    Par défaut
    Je viens de mettre ma classe dans l'exe... et ça fonctionne !
    je vais me pendre...

  18. #38
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 401
    Points : 578
    Points
    578
    Par défaut
    je vais me pendre...
    Non, non, attends encore un peu...

    Qu'est-ce que tu dirais de poster ton projet Builder qui marche, et celui qui déconne (exe+dll) ??

  19. #39
    Membre habitué

    Inscrit en
    Février 2007
    Messages
    250
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Février 2007
    Messages : 250
    Points : 162
    Points
    162
    Par défaut
    Je vais sous poster un projet "light" sans la structure car c'est pour un forfait qui est classé CD (confidentiel défense) donc je ne peux vous donner la structure de la BD, le reste est tellement commun que je peux vous le poster....
    Je fais comment pour le poster ?

  20. #40
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 401
    Points : 578
    Points
    578
    Par défaut
    Quand tu rédiges un message, tu as une icône en forme de trombone pour ajouter des pièces jointes (en zip par exemple)

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 4 PremièrePremière 1234 DernièreDernière

Discussions similaires

  1. probleme : throw new Exception
    Par anto48_4 dans le forum Langage
    Réponses: 8
    Dernier message: 20/12/2010, 08h24
  2. Composite id provoque exception
    Par Reno17 dans le forum Hibernate
    Réponses: 0
    Dernier message: 18/03/2010, 15h39
  3. Réponses: 5
    Dernier message: 25/08/2008, 10h03
  4. New et ses exceptions
    Par TNT89 dans le forum C++
    Réponses: 7
    Dernier message: 04/11/2007, 18h39
  5. msaccess a provoqué une erreur dans KERNEL32.dll
    Par massol joel dans le forum Access
    Réponses: 12
    Dernier message: 03/04/2006, 14h32

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