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

PostgreSQL Discussion :

[fonction C] Visual C++ 6.0


Sujet :

PostgreSQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Avril 2008
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 89
    Par défaut [fonction C] Visual C++ 6.0
    Bonjour à tous,

    suite à un précédent post sur ce forum, j'aimerai développé des fonctions C pour ma BDD. Je dois donc créé une bibliothèque partagée (extension .so).

    Je voulais savoir si ces bibliothèques sont supporté par Win32 (ma question révéle sûrement mon manque de compréhension à ce sujet)...

    Si c'est le cas, est-il possible de développer une bibliothèque C partagée sous un environnement Win32 en utilisant Visual C++ ?

    Quels type de projet dois-je choisir ? Quelles options passer au compilo ?

    Merci à tous.

  2. #2
    Inactif
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 245
    Par défaut
    Bonjour
    De la .so chez Bill ???
    Vous cherchez le mouton a cinq pattes...
    Cordialement

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2008
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 89
    Par défaut Correctif
    Bonjour bustaf.

    Suite au lien que tu m'avais donné pour l'écriture des fonctions C sous postgresql j'ai bêtement cherché à appliquer la méthode pour Linux or je suis sous Bill ... enfin façon de parler ;-)

    Peux-tu m'aider un peu ?

    En fait j'imagines qu'il faut que je crée une DLL (pas de so donc) partagée qui contiennent mes fonctions C, puis que je l'appelles depuis postgre.

    Mais est-ce que cela fonctionnera ? La syntaxe d'import sera-t-elle la même etc...

    Aurais-tu par le plus grand des hazards de la documentation ou des liens (le précédent était super ormis qu'il est dédiés à tout les SE sauf Bill) qui justement explique comment faire les mêmes manip mais sous SE Bill -création de fonction C- ?

    J'ai beau fouiné partout je ne trouve pas et partir à l'aventure (créer une dll puis voir si je peux l'importer) me semble un peu risqué au niveau du rapport réussite/temps passé.

    En plus j'ai un peu de mal à compiler ma dll... mon #include 'postgre.h' engendre pas mal d'erreur de fichiers non trouvé... dois-je ajouter des bibliothèques statiques pour compiler ma dll ?

    Cordialement,

  4. #4
    Membre confirmé
    Inscrit en
    Avril 2008
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 89
    Par défaut Suite ...
    Re,

    j'ai un peu avancé mais au final je bloque.

    J'ai fait une DLL dont je donne le code ici.

    dll.h :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #ifndef _DLL_H_
    #define _DLL_H_
     
    #if BUILDING_DLL
    # define DLLIMPORT __declspec (dllexport)
    #else /* Not BUILDING_DLL */
    # define DLLIMPORT __declspec (dllimport)
    #endif /* Not BUILDING_DLL */
     
     
    DLLIMPORT int add_one(int arg);
     
     
    #endif /* _DLL_H_ */
    dllmain.c :
    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
    /* Replace "dll.h" with the name of your header */
    #include "postgres.h"
    #include <string.h>
    #include "dll.h"
    #include <windows.h>
    #include <stdio.h>
    #include <stdlib.h>
     
    #ifdef PG_MODULE_MAGIC
    PG_MODULE_MAGIC;
    #endif
     
    DLLIMPORT int add_one(int arg)
    {
        return arg +1;
    }
     
     
    BOOL APIENTRY DllMain (HINSTANCE hInst     /* Library instance handle. */ ,
                           DWORD reason        /* Reason this function is being called. */ ,
                           LPVOID reserved     /* Not used. */ )
    {
        switch (reason)
        {
          case DLL_PROCESS_ATTACH:
            break;
     
          case DLL_PROCESS_DETACH:
            break;
     
          case DLL_THREAD_ATTACH:
            break;
     
          case DLL_THREAD_DETACH:
            break;
        }
     
        /* Returns TRUE on success, FALSE on failure */
        return TRUE;
    }
    Tout compile. Je mets la dll, le .a, et tout le reste (même le source!) dans un repertoire direct dans $libdir.

    Enfin quand je cherche à créer ma fonction C sous postgresql :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CREATE OR REPLACE FUNCTION _add_one(integer) RETURNS integer AS
    '$libdir/postgresql_fonctionC/test1', 'add_one'
      LANGUAGE 'c' IMMUTABLE STRICT;
    ALTER FUNCTION _add_one(integer) OWNER TO "postgres";
    PostGreSQL me renvoie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ERROR:  incompatible library "C:/Program Files/PostgreSQL/8.2/lib/postgresql_fonctionC/test1.dll": missing magic block
    ASTUCE : Extension libraries are required to use the PG_MODULE_MAGIC macro.
     
    ********** Erreur **********
     
    ERROR: incompatible library "C:/Program Files/PostgreSQL/8.2/lib/postgresql_fonctionC/test1.dll": missing magic block
    État SQL :XX000
    Pourtant ce magic bloc est bien dans le code source ma dll ?
    Là je vois pas mais bon c'est pas la première fois ni la dernière...

    Peut-être que cela vient des options du compilo (je les ai laissé par défaut et ne suis pas sûr que je crée bien une librairie partagée) ou encore du fait que j'ai juste modifié (sans trop maitrisé) l'ossature de programme fourni par Dev Cpp...

    Si qq peut m'aider je prends.

    Merci.

  5. #5
    Inactif
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 245
    Par défaut
    Bonjour
    Je veux bien vous aider mais le problème je n'ai pas de station Bill sous la
    main pour vous répondre de suite.. avec un exemple precis.
    (Bill n'a aucune connotation péjorative dans mon expression j'apprécie grandement les poduits Microsoft)

    essayez sans definir

    #ifdef PG_MODULE_MAGIC
    PG_MODULE_MAGIC;
    #endif

    Cordialement

  6. #6
    Membre confirmé
    Inscrit en
    Avril 2008
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 89
    Par défaut Je suis le post...
    En fait j'ai déjà essayé (faute d'oubli) d'enlever le 'magic bloc' comme il l'appelle mais le résultat reste le même.

    Du coup je suivrai ce post au cas où vous ayez le temps d'y regarder de plus près.

    En attendant je vais essayer différentes manips.

    PS : je n'ai pas non plus d'a priori sur le système windows (c'est l'OS sur lequel je passe 95 % de mon temps) (ormis quand je vois le prix des licences !!!! et l'acharnement des hackers sur cet OS en particulier) mais je regrette juste la difficulté parfois rencontré lorsqu'on utilise un logiciel initialement développé pour une autre plateforme. Ainsi, j'ai beaucoup de mal à trouver de la doc pour l'utilisation de postgre pour win spécifiquement et les tutoriaux sont presque inexistants. Ce qui est génant c'est qu'un développeur et souvent amené à se spécitialisé sur un système particulier. En quelque mots c'est plus le cloisonnement de chaque OS qui me gène. Mais peut-être qu'avec l'expérience les choses me paraîtront plus claires.

  7. #7
    Inactif
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 245
    Par défaut
    J'ai regardé sur le net
    Le problème peut se produire si la version de la lib utilisée pour la compi est differente de celle utilisée dans la version executable .
    ????
    Cordialement.

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

Discussions similaires

  1. fonction gamma visual dot net 2003
    Par salseropom dans le forum C
    Réponses: 3
    Dernier message: 09/11/2008, 20h17
  2. Aide sur une fonction sous Visual C++ .NET
    Par mog83 dans le forum C++
    Réponses: 0
    Dernier message: 22/04/2008, 15h17
  3. Fonction virtuelle Visual Studio Express 2005
    Par totom1982 dans le forum VC++ .NET
    Réponses: 6
    Dernier message: 12/03/2007, 09h33
  4. Inclure des fonction matlab sous visual c++
    Par petdelascar dans le forum MFC
    Réponses: 3
    Dernier message: 21/11/2005, 17h03
  5. recherche de fonctions équivalentes sous Visual C++ 6.0
    Par magicbisous-nours dans le forum MFC
    Réponses: 3
    Dernier message: 26/10/2005, 09h01

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