begin process at 2012 02 10 06:19:23
  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

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 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à, Transformet un obj en obj[] [ par bigflo93 ] Bonjour à tous :)Voila, je travaille avec la réflection en ce moment et je rencontre un petit souci...J'ai par exemple, une variable telle que: int[] Structure de C à C# [ par darknoon29 ] Salut, on essaie d'intégrer une structure assez compliquée en C#, à l'origine voici l'allure de notre structure C -------------------------Code----- Assembly, Reflection et Dll [ par bigflo93 ] Bonjour à tous :)Voilà je me trouve confronté à un nouveau problème concernant la réflection en C# (et .Net en général)Le pb est le suivant:J'ai une D PInvoke unmanaged data type [ par Lutinore ] Salut, j'ai un doute sur la manière de marshaler le type ULONG_PTR, j'ai pensé a UIntPtr !? Je precise que mon type est dans une structure, merci. Ouvrir fichier avec programme par défaut [ par Marquo ] Bonjour, j'aimerais ouvrir n'importe quel type de fichier depuis C# en utilisant pour chaque type le programme par défaut (comme dans l'explorateur). Return et/ou structuration de classe [ par titi66 ] BonjourJ'ai crée un classe Usines et 3 classes en dérivant. Voici le constructeur :public Usines(string</F Editeur de type perso - Designer [ par bucherb ] Hello!Voilà, j'ai créé des classes qui me permettent de placer une propriété de type hashtable dans un control, et que cette propriété soit éditée ens Comment passer en paramètre ODBC un champ de type datetime qui soit null ? [ par benol ] Bonjour, Je cherche à passer en paramètre ODBC un champ datetime de type NULL J'ai essayé plusieurs choses du style: (DBNull)Null ou bien string = "


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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 : 6,006 sec (3)

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