begin process at 2010 02 10 13:21:09
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C#

 > 

Windows

 > 

Autre

 > 

C# interop dll C, comment charger une structure


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

C# interop dll C, comment charger une structure

vendredi 18 mai 2007 à 17:58:02 | C# interop dll C, comment charger une structure

dirthangel

Salut a tous je developpe actuellement un programme C# utilisant SQLite, j'ai téléchargé un wrapper pour la version 1.5 , que j'ai modifié pour utiliser la version 3.x :), mais voila j'ai un soucie pour ouvrir une base SQLite 3.x il faut fournir un handler de db de type sqlite3 ce type etant une structure définit comme suit (j'ai ajouté le extern) :
 
extern typedef struct sqlite3 sqlite3;

dans la doc d'sqlite l'exemple en C montre
sqlite3 *db; //  on défnit un objet de type sqlite
sqlite3_open("nomdb", &db);

ma question est donc simple comment faire cela en C# ? j'utilise DLLimport pour les fonctions mas je sais pas comment faire pour une structure

vendredi 18 mai 2007 à 18:26:20 | Re : C# interop dll C, comment charger une structure

dirthangel

voic la structure C

struct sqlite3 {
  int nDb;                      /* Number of backends currently in use */
  Db *aDb;                      /* All backends */
  int flags;                    /* Miscellanous flags. See below */
  int errCode;                  /* Most recent error code (SQLITE_*) */
  int errMask;                  /* & result codes with this before returning */
  u8 autoCommit;                /* The auto-commit flag. */
  u8 temp_store;                /* 1: file 2: memory 0: default */
  int nTable;                   /* Number of tables in the database */
  CollSeq *pDfltColl;           /* The default collating sequence (BINARY) */
  i64 lastRowid;                /* ROWID of most recent insert (see above) */
  i64 priorNewRowid;            /* Last randomly generated ROWID */
  int magic;                    /* Magic number for detect library misuse */
  int nChange;                  /* Value returned by sqlite3_changes() */
  int nTotalChange;             /* Value returned by sqlite3_total_changes() */
  struct sqlite3InitInfo {      /* Information used during initialization */
    int iDb;                    /* When back is being initialized */
    int newTnum;                /* Rootpage of table being initialized */
    u8 busy;                    /* TRUE if currently initializing */
  } init;
  int nExtension;               /* Number of loaded extensions */
  void **aExtension;            /* Array of shared libraray handles */
  struct Vdbe *pVdbe;           /* List of active virtual machines */
  int activeVdbeCnt;            /* Number of vdbes currently executing */
  void (*xTrace)(void*,const char*);        /* Trace function */
  void *pTraceArg;                          /* Argument to the trace function */
  void (*xProfile)(void*,const char*,u64);  /* Profiling function */
  void *pProfileArg;                        /* Argument to profile function */
  void *pCommitArg;                 /* Argument to xCommitCallback() */  
  int (*xCommitCallback)(void*);    /* Invoked at every commit. */
  void *pRollbackArg;               /* Argument to xRollbackCallback() */  
  void (*xRollbackCallback)(void*); /* Invoked at every commit. */
  void *pUpdateArg;
  void (*xUpdateCallback)(void*,int, const char*,const char*,sqlite_int64);
  void(*xCollNeeded)(void*,sqlite3*,int eTextRep,const char*);
  void(*xCollNeeded16)(void*,sqlite3*,int eTextRep,const void*);
  void *pCollNeededArg;
  sqlite3_value *pErr;          /* Most recent error message */
  char *zErrMsg;                /* Most recent error message (UTF-8 encoded) */
  char *zErrMsg16;              /* Most recent error message (UTF-16 encoded) */
  union {
    int isInterrupted;          /* True if sqlite3_interrupt has been called */
    double notUsed1;            /* Spacer */
  } u1;
#ifndef SQLITE_OMIT_AUTHORIZATION
  int (*xAuth)(void*,int,const char*,const char*,const char*,const char*);
                                /* Access authorization function */
  void *pAuthArg;               /* 1st argument to the access auth function */
#endif
#ifndef SQLITE_OMIT_PROGRESS_CALLBACK
  int (*xProgress)(void *);     /* The progress callback */
  void *pProgressArg;           /* Argument to the progress callback */
  int nProgressOps;             /* Number of opcodes for progress callback */
#endif
#ifndef SQLITE_OMIT_VIRTUALTABLE
  Hash aModule;                 /* populated by sqlite3_create_module() */
  Table *pVTab;                 /* vtab with active Connect/Create method */
  sqlite3_vtab **aVTrans;       /* Virtual tables with open transactions */
  int nVTrans;                  /* Allocated size of aVTrans */
#endif
  Hash aFunc;                   /* All functions that can be in SQL exprs */
  Hash aCollSeq;                /* All collating sequences */
  BusyHandler busyHandler;      /* Busy callback */
  int busyTimeout;              /* Busy handler timeout, in msec */
  Db aDbStatic[2];              /* Static space for the 2 default backends */
#ifdef SQLITE_SSE
  sqlite3_stmt *pFetch;         /* Used by SSE to fetch stored statements */
#endif
  u8 dfltLockMode;              /* Default locking-mode for attached dbs */
};
samedi 19 mai 2007 à 00:32:44 | Re : C# interop dll C, comment charger une structure

Lutinore

Administrateur CodeS-SourceS

Salut, pour utiliser une structure de C# vers du code C il faut la réécrire dans le code C#, en remplaçant chaque type par leur équivalent managé mais là ta structure est extremement compliquée, avec des pointeurs sur pointeur, des pointeurs de fonction, des directives de compilation et un tas de types prédéfinis propre à SQLite, bref faut être un expert de SQLite pour convertir cette structure.

samedi 19 mai 2007 à 09:22:08 | Re : C# interop dll C, comment charger une structure

coq

Administrateur CodeS-SourceS
Ha ben vla que même Lutinore fait dans l'économie de CRLF



/*
coq
MVP Visual C#
CoqBlog
*/
dimanche 20 mai 2007 à 16:09:22 | Re : C# interop dll C, comment charger une structure

tomlev

Salut,

Si tu veux mon avis, tu te compliques la vie pour rien... il existe des wrappers .NET beaucoup plus simple pour SQLite. Personnellement j'utilise celui ci :
[ Lien ]
En plus il respecte le modèle ADO.NET 2.0 !

Ah, SQLite... le meilleur SGBD du monde, Oracle fait pâle figure à côté ;-)

Tom


Cette discussion est classée dans : type, db, structure, sqlite, sqlite3


Répondre à ce message

Sujets en rapport avec ce message

Reflection, structure et type de base [ par bigflo93 ] Salut à tous :) Voilà, dans mon programme j'utilise la réflection. J'ai besoin de différencier les "ValueType" et type réference... Seulement voilà, renvoi de structure dans une dll c++ [ par cassiopee ] D'abord bonjour a tous.Ensuite... j'ai un probleme (eh oui c'est pour ca que j'écris ce message)Voila je dois ecrire un programme en C#.NET qui utilis Comment convertir un objet control [ par FrakTaLiTe ] Salut à tous,Ma question me parait toute bete et pourtant je ne trouve pas.J'ai un objet de type control et je souhaite le convertir en un objet de ty Typage d'un Objet [ par Bubuss ] Salut tout le monde, je bloque sur un truc tout bête mais pour lequel je ne trouve pas d'information dans l'immedia...(et il est vrai que je n'ai pas Lire flux XML [ par Pierrick34090 ] Salut,Voilà mon problème: (Langage C#) Je désire enregistrer un flux XML (du type blabla) dans ma base de données SQL Server. Ceci est très facile en Obtenir le Content-Type abrégé d'un fichier [ par karnalta ] Bonjour à tous,Cela fait maintenant quelques heures que je parcours le net à la recherche d'un information qui reste introuvable..Je voudrais pour un Tableau dans une structure [ par kiboumz ] Bonjour,J'aimerais savoir comment faire pour mettre un tableau dans une structureEx:        struct structTest        {            public String[] Cham probleme de conversion byte[] en string [ par qaiden ] Bonjour,le probleme est le suivant:Je dois envoyer des donnees venant d une base de donne sur le reseau, j ai decider d envoyer la taille maximale a c Mettre une colonne de type booléen dans un dataset [ par francesdereve ] Le probleme c'est que je ne peux pas les recuperer dans la dataset c'est dans l'ultragrid que je dois les recupere on m'a proposé cette solution mais Cloner un Objet sans utiliser son Type... [ par Bubuss ] Salut à tous, j'ai un objet et je cherche à faire une copie par valeur de ce dernier (le cloner)Comment puis-je faire étant donné que la classe object


Nos sponsors


Sondage...

Comparez les prix


HTC Hero

Entre 550€ et 550€

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,702 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales