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

MFC Discussion :

Int�grer du MFC dans un projet qui n'en a pas. c'est possible?


Sujet :

MFC

  1. #1
    Membre � l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    6
    D�tails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2008
    Messages : 6
    Par d�faut Int�grer du MFC dans un projet qui n'en a pas. c'est possible?
    Bonjour � tous,

    je viens vers vous car je d�bute avec la programmation Windows et je me trouve pris par le temps.

    Je vais tacher de vous r�sumer ma situation et mon environnement de travail en esp�rant �tre assez clair. Ne sachant pas tout les �l�ments qui pourraient vous �tre utile, je vous pris de ne pas h�siter � me solliciter pour avoir des pr�cisions sur des options, des copies d'�cran ou autre.

    Pour mieux me situer, j'ai repris des �tudes et je dois r�aliser un projet de d�v. Mes cours n'ont pas �t� sp�cifiquement orient� technologie Microsoft et environnement Windows. C'est une formation assez g�n�raliste qui donne un aper�u de plusieurs langage de d�v, des bases de donn�es, du SI, ....

    Mon projet m'a �t� fourni par une entreprise d'imagerie m�dicale qui souhaite ajouter la prise en charge d'un nouveau mat�riel � son logiciel maison. Pour cela, l'entreprise m'a fourni les �l�ments suivant :
    - Librairie Qt � compiler sur notre poste en v4.7
    - Librairie OpenCV v2.2 (pour le traitement d'image)
    - Librairie dcmtk v3.5.4 (manipulation norme DICOM)
    - Langage C++
    - IDE : Visual Studio 2010 Express
    - le nouveau mat�riel est fourni avec un SDK comprenant dll, .cpp et .h pour acc�s � la dll et une appli d�mo avec ses sources.

    Mon probl�me : n'arrivant pas � compiler un programme de test pour appeler la dll, j'ai perdu du temps � comprendre qu'elle utilise les librairie MFC. Ensuite j'ai �galement perdu du temps � comprendre que la version Express de Visual ne g�re pas les MFC. Ce point � �t� r�gl� en passant � la version Visual Studio Pro.

    N�anmoins, je n'arrive pas � compiler car je ne sais pas comment faire pour int�grer dans un simple projet en C++ des �l�ments de classe MFC?
    Dois-je changer des param�tres au projet Visual ou bien faire l'ajout de .h ou bien les 2?
    Mais la r�ponse est peut-�tre que c'est impossible?....

    Voil�, je me noie sous la documentation qui me parle de MFC pour faire de jolie application fen�tr�e mais moi je n'ai pas besoin de l'affichage de la fen�tre (il y a Qt) donc je ne trouve pas de r�ponse pour r�gler mes probl�mes d'int�gration/compilation.

    Merci d'avance pour �tre arriv� � lire jusqu'� cette ligne et encore plus de merci si vous pouvez m'aider/m'orienter pour trouver une solution

  2. #2
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Je dirais que �a d�pends de quelles parties de MFC sont utilis�es par le code que tu veux ajouter � ton application...
    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.

  3. #3
    Membre �m�rite
    Homme Profil pro
    Inscrit en
    F�vrier 2006
    Messages
    564
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 52
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 564
    Par d�faut
    Bonjour.

    Il nous faut un minimum d'infos pour t'aider, par exemple quelles sont les erreurs lors de la compilation et le code minimaliste de ton test. Je confirme les dires de M�dinoc, si tu n'utilises pas de classes MFC il n'y a aucune raison d'inclure les ent�tes dans ton projet en revanche tu devras modifier les propri�t�s de ton projet pour lui dire d'utiliser les MFC ainsi que les diff�rents dossiers (include, lib).

  4. #4
    Expert confirm�
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2005
    Messages
    5 507
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 5 507
    Par d�faut
    Je confirme les dires de mes voisins du dessus.
    Mais je voudrais ajouter ma pierre au questionnement.
    Vous indiquez que l'exemple fourni dans le SDK utilise les MFC, mais il y a une chose tr�s importante � savoir d�s le d�but :
    Est-ce que la Dll a besoin des MFC ?
    Si ce n'est que le programme de test qui � besoin des MFC, vous n'avez pas besoin de vous emb�ter avec les MFC. Faire cohabiter les MFC et Qt est une t�che qui potentiellement est tr�s complexe voir impossible.
    La documentation du SDK devrait indiquer la d�pendance aux MFC, et � quelle version, si c'est la dll qui est d�pendante des MFC.
    Si vous avez des extraits du code qui correspondent a l'utilisation des fonctions de la Dll, cela permettrait de savoir si c'est la Dll ou l'exemple qui a besoin des Dll.
    Vous pouvez utiliser dependency walker (http://www.dependencywalker.com/)pour savoir si la Dll depend fortement des MFC.

  5. #5
    Membre � l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    6
    D�tails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2008
    Messages : 6
    Par d�faut
    Bonjour,

    merci de vos retour et mes excuses du retard pour r�pondre mais d'autre priorit� mon occup� entre temps (des exams par exemple )

    Voici une partie du fichier .h qui me pose soucis et particuli�rement une ligne :
    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
     
    /** *************************************************************** **
     **          Radiography Detector: application interface            **
     **  (c) VATech                                         by S.B.     **
     **  initial release: July-2007                                     **
     **  recent edition : Sept-2008                                     **
     ** *************************************************************** **/
     
    #ifndef VADAVINTF_H_INCLUDED
    #define VADAVINTF_H_INCLUDED
      ////// acquisition //////
     
    ////  Je passe le code qui ne pose pas de souci //////
     
      typedef struct {         // Custom information record
    	  int  rNumReceivedRows, // acquisition uses this field to print messages
    		  rComplete;        // indicates that caller terminates (by some reason) and expects "close"
    	  // the possible reasons are: 'complete', 'error' or 'abort'
    	  int rCalMode;
    	  CWnd *rhWnd;
      } tCallBackRec;
     
      // callback procedure  
      typedef void (_stdcall *tVDC_CallBackProc)( tVDC_CallBackRec* );
     
    ///// Je vous épargne le reste du code
    Si mes recherches sont bonnes ma structure ci-dessus contient le type CWnd qui correspond � un objet MFC, selon MSDN : "Fournit les fonctionnalit�s de base de toutes les classes de fen�tres dans la biblioth�que MFC".
    Lors de la compilation de mon projet Qt, le compilateur me dis qu'il manque un ';' apr�s 'CWnd *'. La structure est utilis�e pour communiquer des informations entre le capteur et mon "futur" programme mais je ne pense pas que la dll s'amuse � afficher des fen�tres

    Ci-dessous, l'ent�te du fichier cpp le reste du code ne me semble pas pertinent pour le moment.
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    /** *************************************************************** **
     **          Radiography Detector: application interface            **
     **  (c) VATech                                         by S.B.     **
     ** *************************************************************** **/
     
    #include "stdafx.h"
    #include "windows.h"
    #include "tchar.h"
    #include "VADAVIntf.h"
    Voici mes �tapes de travail pour test� la librairie avec Qt.
    J'ai install� Qt sous Visual 2010 en suivant le tuto de Xavinou http://qt.developpez.com/tutoriels/e...l-studio-2010/.
    J'ai repris le projet test et seulement ajout� le .h et le .cpp au projet.
    Il s'agit d'un projet de type 'makefile' et la compilation est tomb� en erreur en me disant parmi les erreur qu'il manque un ';' apr�s 'CWnd *'.

    J'ai cr�� un projet "hello world" sous Visual de type MFC, j'y ai ajout� le .h et le .cpp et l� j'ai pus compiler. En voulant jouer sur les propri�t�s des projets MFC et 'makefile' je me rend compte que les options disponibles ne sont pas les m�mes. Il faut s�rement ajouter des lib et includes mais je ne sais pas lesquels.

    Pour la documentation du SDK, la seul infos � ma disposition est la suivante :
    This library (and demo projects) is originally written in � MS Visual C 6.0 �. That old IDE (Integrated Developers� Environment) was used for fast installation for debug when required. Release version built by �MS Visual Studio 2005� (that improves 2-5% speed of calibration and image processing). Supplementary projects are for �VC 6.0� or �VS 2005� (they exist in directories with extension �.VC8�). MFC is built-in as static library.
    J'esp�re avoir pr�cis� un peu les choses, pour les msg d'erreurs je compl�terai un peu plus tard car je n'ai pas la machine sous la main au moment o� je saisi ces lignes.

    Encore merci de votre aide.

  6. #6
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Houl�, m�langer des CWnd* (l'essence de l'interface graphique dans MFC) avec des fen�tres QT, �a s'annonce tr�s mal. QT est cens� faire abstraction de l'API Windows, alors que MFC l'embrasse compl�tement...
    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.

  7. #7
    Membre � l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    6
    D�tails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2008
    Messages : 6
    Par d�faut
    C'est �galement mon avis.
    N�anmoins, je pense que la structure n'est pas utilis� par la dll pour ouvrir des fen�tre mais seulement transf�rer des informations (me demandez pas lesquelles SVP ) et lors de mes recherches j'ai lus quelques infos concernant la technique des wrappers. J'ai bien compris qu'il s'agit en g�n�ral d'embarquer du C++ dans un programme en C# ou en Python ou dans un autre langage, mais cette technique pourrait-elle �tre utilis� dans mon cas? (du C++ encapsul� pour �tre appel� par du C++... c'est peut-�tre pas commun )

  8. #8
    Expert confirm�
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2005
    Messages
    5 507
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 5 507
    Par d�faut
    Vous avez r�pondu � pas mal de mes questions.
    Et malheureusement, ces r�ponses ne font qu'assombrir le paysage.

    Je partage le pessimisme de M�dinoc.

    Ce n'est pas impossible que cela fonctionne, mais si cela fonctionnera, �a sera aux forceps.

    Toutes les remarques et assertions que vous indiquez sont bonnes.

    Pour simplifier la situation, avec vous les sources de cette librairie et �tes vous en mesure dans faire une version compil�e avec votre VS ?

    Si oui, cela permettrait d'�viter des probl�mes de compatibilit� avec d'ancienne C-Runtime.
    Sinon, faudra russ�.

    je pense que la structure n'est pas utilis� par la dll pour ouvrir des fen�tre mais seulement transf�rer des informations
    Si c'est pas le cas, on est encore plus dans la mo�se.

    Je vois 2 approches:

    -Soit int�grer les MFC dans votre application juste acc�s pour pouvoir instancier une CWnd qui ferait passe-plat vers vos objets Qt
    -> Avantages : Plus de change de r�pondre correctement aux sollicitations de la Dll.
    -> Inconv�nients : Plus de probl�mes potentiels avec Qt, il faudra gruger le code des MFC pour ne pas entrer en collision avec Qt.

    -Soit cr�er une classe CWnd de toutes pi�ces et fabriquer tout ce qui est n�cessaire � son utilisation par la Dll.
    -> Avantages : On ne doit pas int�grer, peu ou prou, les MFC, donc moins de probl�mes potentiels avec Qt.
    -> Inconv�nients : Beaucoup plus de travail d'�mulation du comportement des MFC, si la Dll s'en sert.

    Le second approche est peut-�tre � privil�gier dans un premier temps, en esp�rant une faible int�gration entre les MFC et la Dll.

    Vous ne nous avez pas donn� toute l'API, nous ne sommes donc pas en mesure de dire si la Dll et l'ex�cutable sont �tanche d'un point de vue m�moire.
    Si ce n'est pas le cas, il faudra prendre la m�me C-Runtime que celle qui a servi � cr�er la Dll.

  9. #9
    Membre �m�rite
    Homme Profil pro
    Inscrit en
    F�vrier 2006
    Messages
    564
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 52
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 564
    Par d�faut
    Bonsoir, je confirme les dires de mes coll�gues. De plus je dirais que �a sent pas tr�s bon

    La librairie fournie avec votre sdk est compil�e (mode debug et release) avec des versions diff�rentes des MFC qui sont elles-m�me diff�rentes des MFC de visual studio 2010 ce qui implique des probl�mes de compatibilit� in�vitable.

    Avant d'aller plus loin, concentrez vous sur l'utilisation de votre dll ou plut�t son int�gration dans un petit programme de test sous visual studio 2010. Lisez bien la doc, elle vous fournira normalement des infos importantes sur son utilisation. Si vous n'avez pas les sources pour recompiler cette dll avec votre votre version de visual studio, procurez vous le package redistribuable de la version 2005 https://www.microsoft.com/fr-fr/down...s.aspx?id=3387 pour installer les composants n�cessaires � l'utilisation de votre dll (CRT, MFC, ALT ...) et utilisez les m�thodes standard de chargement dynamique http://cpp.developpez.com/faq/vc/?pa...-dynamiquement

  10. #10
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Peut-�tre serait-il possible de mettre une DLL interm�diaire entre les deux, une qui n'utiliserait MFC qu'en interne et n'exposerait rien qui ait trait � MFC dans son interface?
    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.

  11. #11
    Membre � l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    6
    D�tails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2008
    Messages : 6
    Par d�faut
    Merci � vous tous de vos r�ponses.

    @bacelar : je ne dispose pas, malheureusement pour moi, des sources de la dll. Finalement le SDK ne regroupe que 3 fichiers � utiliser intitul� VADAVIntf.h, VADAVIntf.cpp et VADAV.dll.

    @ddaime : la doc... je ne sais pas comment la consid�rer... elle fait 12 pages et les quelques informations la d�crivant tiennent dans la citation suivante, le reste est une succession de fonctions avec une br�ve description regroup� selon l'utilisation faite du mat�riel.
    1.1. Supported IDEs and Character Sets
    This library (and demo projects) is originally written in � MS Visual C 6.0 �. That old IDE (Integrated Developers� Environment) was used for fast installation for debug when required. Release version built by �MS Visual Studio 2005� (that improves 2-5% speed of calibration and image processing).
    Supplementary projects are for �VC 6.0� or �VS 2005� (they exist in directories with extension �.VC8�).
    MFC is built-in as static library.

    All projects (and library�s source itself) use TCHAR and respective macros. They use neither �char� nor �wchar� explicitly (except for communications with firmware through RS-232 and Ethernet). So library could be easily switched between UNICODE and Multi-Byte characters. Basically the library comes as Multi-Byte. Request UNICODE version if you need that.

    Note: under the unicode environment, use VADAV_Unicode\VADAV.DLL and VADAVIntf.cpp with �#define UNICODE�

    1.2. Files
    You have to include the next 2 files in your project (it must necessarily allow �TCHAR�):
    VADAVIntf.h � interface declarations
    VADAVIntf.cpp � implements supplementary interface�s loader
    Je pense qu'il y a dans cette premi�re partie des informations utiles pour savoir peut-�tre comment orienter ma recherche mais je n'ai pas l'exp�rience des d�veloppements avec Visual pour percevoir les cons�quences qu'implique les diff�rences de versions de Visual.

    Entre temps, ayant compris que je manipulais une dll avec des MFC j'ai fais un projet "hello world" sous Visual Studio mais cette fois en version Pro, j'ai pus choisir le type de projet MFC et choisir dans les propri�t�s les options qui vont bien pour compiler

    Et j'en suis l� : j'ai un projet test pour Qt de type "makefile" qui compile et fonctionne ainsi qu'un un projet test pour MFC type "application MFC" qui compile et fonctionne mais je ne vois vraiment pas comment fusionner les deux.

    Concernant le chargement dynamique de la dll, je ne sais pas si la pr�cision que vais vous donner peut-�tre utile mais cela me permet de vous expliquer comment elle devrait �tre manipul�.
    Le mat�riel d'imagerie m�dicale dispose d'un outil de calibration que l'on doit installer sur le pc. La dll est alors copi�e lors de l'installation. Pour que mon programme puisse utiliser les fonction de la dll, je dois faire appel � une fonction, VADAV_MapDLL(), d�clarer dans VADAVIntf.h qui (si j'ai bien compris) charge ou mappe les fonctions contenuent dans la dll au sein d'une structure (type tVADAV_InterfaceRec). Et histoire de charger ma r�ponse voici une copie de VADAVIntf.h, la fonction et la structure sont en fin de fichier.
    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
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    /** *************************************************************** **
     **          Radiography Detector: application interface            **
     **  (c) VATech                                         by S.B.     **
     **  initial release: July-2007                                     **
     **  recent edition : Sept-2008                                     **
     ** *************************************************************** **/
    #include <afxwin.h>
     
    #ifndef VADAVINTF_H_INCLUDED
    #define VADAVINTF_H_INCLUDED
      ////// acquisition //////
      // acquisition flags
      #define cVDACQ_FDark         0       // acquire Dark frame (dark otherwise)
      #define cVDACQ_FBright       1       // acquire bright frame (dark otherwise)
      #define cVDACQ_FTestPat      2       // acquire test pattern  /TFT only
      #define cVDACQ_FRecentFrame  4       // retrieve recent frame /TFT only
      #define cVDACQ_FBrightIgn   (1<<31)  // ignore state of the bit 'Bright' /TFT only
      //  #define cVDACQ_FI_Bright61  (1<<31)  // 'bright61' /USB only
      // acquisition event types
      #define cVDACQ_ETTrace       0
      #define cVDACQ_ETTraceT      1
      #define cVDACQ_ETErr         2
      #define cVDACQ_ETLastErr     3
      #define cVDACQ_ETWSAErr      4
      // acquisition events
      #define cVDACQ_EAbort        1
      #define cVDACQ_EClose        2
      #define cVDACQ_ECapture      20
      #define cVDACQ_ECapturePerc  21
      #define cVDACQ_ECaptureRecv  22
     
      // acquisition feedback record   
      typedef struct {
        int    rFlags,            // combination of cVDACQ_Fxxxx
               rType,             // cVDACQ_ETxxx
               rEvent,            // cVDACQ_Exxx
               rSocket;           // 0:no socket relation; otherwise socket's ID >0 
        TCHAR  rMsg[256];         // message (trace, wrn, err)
        int    rFrameWidth,       // full frame width
               rFrameHeight;      // full frame height
        short *rFrameBuffer;      // user supplied frame buffer "AFrameBuffer"
        int    rCaptureRows,      // # of received rows
               rCapturePercent;   // received data in percents
        void  *rUserCallBackProc, // user supplied "ACallBackProc"
              *rUserParam;        // user supplied "AUserParam"
        int    rAborted;          // 1: VDACQ_Abort -1:internally
        void  *rPacketData;       // pointer to received packet; usually it is nil  
      } tVDACQ_CallBackRec;
        // socket's id #1: control-write UDP
        //             #2: control-read UDP
        //             #3: data TCP socket
        // When callback is triggered by received message from detector it has non-nil field
        // PacketData. Normally an OEM application does not check received packets directly.
     
      // callback procedure  
      typedef void (_stdcall *tVDACQ_CallBackProc)( tVDACQ_CallBackRec* );
     
      ////// calibration //////
      // calibration flags
      #define cVDC_FCalOffs      1
      #define cVDC_FCalGain      2
      #define cVDC_FANoisRem     4
      #define cVDC_FBadPixMap    8
      #define cVDC_FDespeckle   16
      #define cVDC_FAVSmooth    32
      #define cVDC_FChkHWDark   (1<<30)  // check if recennt dark-frame is auto-calibrated
      #define cVDC_FTempDirIP   (1<<31)  // save temporary images in default image direcotory
      // calibration event types
      #define cVDC_ETTrace       0
      #define cVDC_ETTraceT      1
      #define cVDC_ETErr         2
      // calibration events
      #define cVDC_EAbort        1
      #define cVDC_EClose        2
      #define cVDC_ECalib        20
      #define cVDC_ECalibPerc    21
      // calibration feedback record   
      typedef struct {
        int    rFlags,            // combination of cVDC_Fxxxx
               rType,             // cVDC_ETxxx
               rEvent;            // cVDC_Exxx
        TCHAR  rMsg[256];         // message (trace, wrn, err)
        int    rFrameWidth,       // full frame width
               rFrameHeight,      // full frame height
               rStoredWidth,      // stored image width
               rStoredHeight,     // stored image height
               rCalibPercent;     // processed data in %
        short *rFrameBuffer,      // received frame data
              *rImageBuffer;
        void  *rUserCallBackProc, // user supplied "ACallBackProc"
              *rUserParam;        // user supplied "AUserParam"
        int    rAborted;          // 1: set by VDC_Abort; -1:internally
      } tVDC_CallBackRec;
     
      typedef struct {         // Custom information record
    	  int  rNumReceivedRows, // acquisition uses this field to print messages
    		  rComplete;        // indicates that caller terminates (by some reason) and expects "close"
    	  // the possible reasons are: 'complete', 'error' or 'abort'
    	  int rCalMode;
    	  CWnd *rhWnd;
      } tCallBackRec;
     
      // callback procedure  
      typedef void (_stdcall *tVDC_CallBackProc)( tVDC_CallBackRec* );
     
      typedef struct {
        int  rImgCutLeft,          // cut left after rotation & flip 
             rImgCutTop,           // cut top after rotation & flip
             rImgCutRight,         // cut right after rotation & flip
             rImgCutBottom,        // cut bottom after rotation & flip
             rRotation,            // 0:none, 1:90 deg CCW, 2:90 deg CW
             rFlip;                // bit #0: flip horz, bit #1: flip vert 
      } tVDC_ImgCut;
     
      ///// image process /////
      // img process flags
      #define cVDIP_FDespeckle    1
      #define cVDIP_FAVSmooth     2
      #define cVDIP_F3PCurve      4
      #define cVDIP_FUSMask       8
      // img process event types
      #define cVDIP_ETTrace       0
      #define cVDIP_ETTraceT      1
      #define cVDIP_ETErr         2
      // img process events
      #define cVDIP_EAbort        1
      #define cVDIP_EClose        2
      #define cVDIP_EEnh          20
      #define cVDIP_EEnhPerc      21
      // img process feedback record   
      typedef struct {
        int    rFlags,            // combination of cVDC_Fxxxx
               rType,             // cVDC_ETxxx
               rEvent;            // cVDC_Exxx
        TCHAR  rMsg[256];         // message (trace, wrn, err)
        int    rStoredWidth,      // stored image width
               rStoredHeight,     // stored image height
               rEnhPercent,       // processed data in %
               rModeNumber;       // img process mode
        short *rImageBuffer;      // image buffer
        void  *rUserCallBackProc, // user supplied "ACallBackProc"
              *rUserParam;        // user supplied "AUserParam"
        int    rAborted;          // 1: set by VDIP_Abort; -1:internally
      } tVDIP_CallBackRec;
      // callback procedure  
      typedef void (_stdcall *tVDIP_CallBackProc)( tVDIP_CallBackRec* );
     
      #ifdef INTERNAL_VATECH_DAVINCI_LIBRARY // procedures' declarations ('as is' in the DLL)
     
        // general UI and logs //
        // invokes general property sheet
        BOOL _stdcall VD_Dialog();
        // open log-file
        void _stdcall VD_LogOpen( const TCHAR *AHomeDir, int ANumLogFiles, const TCHAR *AFPrefix );
        // record string to log-file
        void _stdcall VD_LogMsg( const TCHAR *AMsg );
        // close log-file
        void _stdcall VD_LogClose();
        // flush log-file
        void _stdcall VD_LogFlush();
        // returns home directory
        void _stdcall VD_GetHomeDirectory( TCHAR *ADir );
        // set section name in library's initialization profile file
        void _stdcall VD_IniProfSetSection( const TCHAR *ASectName );
        // get string key from library's initialization profile
        const TCHAR* _stdcall VD_IniProfGetStr( const TCHAR *AKeyName, const TCHAR *ADefault );
        ////// acquisition //////
        // sets full frame dimension (should not be called for real acquisitin case)
        void _stdcall VDACQ_SetFrameDim( int AWidth, int AHeight );
        // returns full frame dimension
        void _stdcall VDACQ_GetFrameDim( int *AWidth, int *AHeight );
        // connects to detector
        tVDACQ_CallBackRec* _stdcall VDACQ_Connect( int AFlags,
          tVDACQ_CallBackProc AUserCallBackProc, void *AUserParam, short *AFrameBuffer, int AMode );
        // send simple auxiliary command (FFT only)
        BOOL _stdcall VDACQ_SendCommand( tVDACQ_CallBackRec *ACallBackRec, DWORD ACommand );
        BOOL _stdcall VDACQ_SendCommandParam( tVDACQ_CallBackRec *ACallBackRec, DWORD ACommand, const void *AData, int ADataSize );
        // vendor comamnd (USB only)
        BOOL _stdcall VDACQ_VendorCommand( tVDACQ_CallBackRec *ACallBackRec, int ARequest, int AValue, int AIndex );
        // starts acquisition
        BOOL _stdcall VDACQ_StartFrame( tVDACQ_CallBackRec *ACallBackRec );
    	BOOL _stdcall VDACQ_GetFrame( tVDACQ_CallBackRec *ACallBackRec, int FrameNum );
    	BOOL _stdcall VDDBG_SendCommand( int command, int address, int data1, int data2 );
        // aborts acquisition
        BOOL _stdcall VDACQ_Abort( tVDACQ_CallBackRec *ACallBackRec );
        // releases resources associated with ACallBackRec
        void _stdcall VDACQ_Close( tVDACQ_CallBackRec *ACallBackRec );
        // returns current detector's IP
        void _stdcall VDACQ_GetDetectorIPAddr( TCHAR *AIPAddr );
        // sets detector's IP
        void _stdcall VDACQ_SetDetectorIPAddr( const TCHAR *AIPAddr );
        BOOL _stdcall VDACQ_GetDetectorInfo( int Parameter );
     
        ////// calibration //////
        // returns image dimension; returns FALSE if all cut margins are zero
        BOOL _stdcall VDC_GetImageDim( int *AWidth, int *AHeight );
        // cuts (also rotates and flips optionally) frame buffer to image's dimension.
        short *_stdcall VDC_CutImage( const short *AFrameBuffer, short *AImageBuffer );
        // starts calibration
        tVDC_CallBackRec* _stdcall VDC_Process( int AFlags,
          tVDC_CallBackProc AUserCallBackProc, void *AUserParam, short *AFrameBuffer );
        // aborts calibration
        BOOL _stdcall VDC_Abort( tVDC_CallBackRec *ACallBackRec );
        // releases resources associated with ACallBackRec
        void _stdcall VDC_Close( tVDC_CallBackRec *ACallBackRec );
        // service: returns current calibration directory
        void _stdcall VDC_GetCalibrationDirectory( TCHAR *ADir );
        // service: set temporary calibration directory
        BOOL _stdcall VDC_SetCalibrationDirectory( const TCHAR *ADir );
        // service: returns image cut params
        void _stdcall VDC_GetImgCutParams( tVDC_ImgCut *ACutParams );
        // service: sets image cut params
        void _stdcall VDC_SetImgCutParams( const tVDC_ImgCut *ACutParams );
     
    	//BOOL _stdcall VDC_GenerateAuto( const tBP_ADetRec *ABPR, const TCHAR *AFMaskDark, const TCHAR *AFMaskBright, const TCHAR *ABPMFName );
        BOOL _stdcall VDC_GenerateAuto();
    	int _stdcall VDC_GetDark( tVDACQ_CallBackProc AUserACQCallBackProc, tVDC_CallBackProc AUserCALCallBackProc );
    	int _stdcall VDC_GetBright( tVDACQ_CallBackProc AUserACQCallBackProc, tVDC_CallBackProc AUserCALCallBackProc );
    	BOOL _stdcall VDC_GenerateBright();
     
        ///// image process /////
        // starts img process 
        tVDIP_CallBackRec* _stdcall VDIP_Process( int AFlags,
          tVDIP_CallBackProc AUserCallBackProc, void *AUserParam, short *AImageBuffer, int AModeNumber );
        // aborts img process 
        BOOL _stdcall VDIP_Abort( tVDIP_CallBackRec *ACallBackRec );
        // releases resources associated with ACallBackRec
        void _stdcall VDIP_Close( tVDIP_CallBackRec *ACallBackRec );
     
        //// user interface /////
        void _stdcall VD_Set_Acquisition( int AFlags, short *AFrameData, int AModeNumber, tVDACQ_CallBackProc AUserCallBackProc, void *AUserParam );
        void _stdcall VD_Set_Calibration( int AFlags, short *AFrameData, short *AImgData, tVDC_CallBackProc AUserCallBackProc, void *AUserParam );
    	void _stdcall VD_Get_Calibration( int &AOfsCal, int &AGainCal, int &ABadPixMap, int &m_nCal_HWOfsCal );
        void _stdcall VD_Set_ImgProcess( int AFlags, short *AImgData, int AModeNumber, tVDIP_CallBackProc AUserCallBackProc, void *AUserParam );
        int _stdcall VD_GetImage( HWND AOwner );
        int _stdcall VD_GetImageSP( HWND AOwner, int AWndLeft, int AWndTop, int AWndWidth, int AWndHeight );
        void _stdcall VD_GetImageCancel();
     
    	//// Auxiliary
    	BOOL _stdcall VD_ConnectRestore();
     
      #else // for use in applications
     
        // table of exported methods
        typedef struct {
          HINSTANCE rHDLL; // the library's handle
          // general UI and logs //
          BOOL (_stdcall *rVD_Dialog)( HWND ); // it has additional parameter: owner's window
          void (_stdcall *rVD_LogOpen)( const TCHAR*, int, const TCHAR* );
          void (_stdcall *rVD_LogMsg)( const TCHAR* );
          void (_stdcall *rVD_LogClose)(void);
          void (_stdcall *rVD_LogFlush)(void);
          void (_stdcall *rVD_GetHomeDirectory)( TCHAR* );
          void (_stdcall *rVD_IniProfSetSection)( const TCHAR* );
          const TCHAR* (_stdcall *rVD_IniProfGetStr)( const TCHAR*, const TCHAR* );
          ////// acquisition //////
          void (_stdcall *rVDACQ_SetFrameDim)( int, int );
          void (_stdcall *rVDACQ_GetFrameDim)( int*, int* );
          tVDACQ_CallBackRec* (_stdcall *rVDACQ_Connect)( int, tVDACQ_CallBackProc, void*, short*, int );
          BOOL (_stdcall *rVDACQ_SendCommand)( tVDACQ_CallBackRec*, DWORD );
          BOOL (_stdcall *rVDACQ_SendCommandParam)( tVDACQ_CallBackRec*, DWORD, const void*, int );
          BOOL (_stdcall *rVDACQ_StartFrame)( tVDACQ_CallBackRec* );
    	  BOOL (_stdcall *rVDACQ_GetFrame)( tVDACQ_CallBackRec*, int ); 	  //// 1417P Debug Mode ////
          BOOL (_stdcall *rVDACQ_VendorCommand)( tVDACQ_CallBackRec*, int, int, int );
    	  BOOL (_stdcall *rVDDBG_SendCommand)( int , int , int , int );
          BOOL (_stdcall *rVDACQ_Abort)( tVDACQ_CallBackRec* );
          void (_stdcall *rVDACQ_Close)( tVDACQ_CallBackRec* );
          void (_stdcall *rVDACQ_GetDetectorIPAddr)( TCHAR* );
          void (_stdcall *rVDACQ_SetDetectorIPAddr)( const TCHAR* );
          BOOL (_stdcall *rVDACQ_GetDetectorInfo)( int );
          ////// calibration //////
          BOOL (_stdcall *rVDC_GetImageDim)( int*, int* );
          short* (_stdcall *rVDC_CutImage)( const short*, short* );
          tVDC_CallBackRec* (_stdcall *rVDC_Process)( int, tVDC_CallBackProc, void*, short* );
          BOOL (_stdcall *rVDC_Abort)( tVDC_CallBackRec* );
          void (_stdcall *rVDC_Close)( tVDC_CallBackRec* );
          void (_stdcall *rVDC_GetCalibrationDirectory)( TCHAR* );
          BOOL (_stdcall *rVDC_SetCalibrationDirectory)( const TCHAR* );
          void (_stdcall *rVDC_GetImgCutParams)( tVDC_ImgCut* );
          void (_stdcall *rVDC_SetImgCutParams)( const tVDC_ImgCut* );
    	  BOOL (_stdcall *rVDC_GenerateAuto)( );
    	  int (_stdcall *rVDC_GetDark)( tVDACQ_CallBackProc, tVDC_CallBackProc );
    	  int (_stdcall *rVDC_GetBright)( tVDACQ_CallBackProc, tVDC_CallBackProc );
    	  BOOL (_stdcall *rVDC_GenerateBright)( );
          ///// image process /////
          tVDIP_CallBackRec* (_stdcall *rVDIP_Process)( int, tVDIP_CallBackProc, void*, short*, int );
          BOOL (_stdcall *rVDIP_Abort)( tVDIP_CallBackRec* );
          void (_stdcall *rVDIP_Close)( tVDIP_CallBackRec* );
          //// user interface /////
          void (_stdcall *rVD_Set_Acquisition)( int, short*, int, tVDACQ_CallBackProc, void* );
          void (_stdcall *rVD_Set_Calibration)( int, short*, short*, tVDC_CallBackProc, void* );
    	  void (_stdcall *rVD_Get_Calibration)( int &, int &, int &, int & );
          void (_stdcall *rVD_Set_ImgProcess)( int, short*, int, tVDIP_CallBackProc, void* );
          int (_stdcall *rVD_GetImage)( HWND );
          int (_stdcall *rVD_GetImageSP)( HWND, int, int, int, int );
          void (_stdcall *rVD_GetImageCancel)(void);
    	  //// Auxiliary
    	  BOOL (_stdcall *rVD_ConnectRestore)(void);
        } tVADAV_InterfaceRec; 
     
        BOOL VADAV_MapDLL( const TCHAR *ADllFName, tVADAV_InterfaceRec *AIntfRec );
        // calls LoadLibrary and fills "AIntfRec"
        void VADAV_ReleaseDLL( tVADAV_InterfaceRec *AIntfRec );
        // calls FreeLibrary
     
      #endif // for use in applications
    #endif // ifdef VADAVINTF_H_INCLUDED
    Sinon les approches propos�es par bacelar me semblent int�ressantes mais pas une mince affaire � mettre en oeuvre. La solution de M�dinoc est aussi int�ressante et peut-�tre plus facile � mettre en oeuvre mais je vais devoir �tudier de plus pr�s la r�alisation de dll car je n'en ai jamais fais.

    J'esp�re vous avoir apport� des pr�cisions utiles qui pourront vous aider � pr�ciser vos suggestions et je vous remercie d'avance de votre int�r�t.

  12. #12
    Expert confirm�
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2005
    Messages
    5 507
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 5 507
    Par d�faut
    J'ai une petite lueur d'espoir.

    La technique du mapping des fonctions avec du LoadLybrary et le remplissage de pointeur de fonction, normalement, c'est pour de la programmation bas niveau, donc sans MFC.
    Et la seul structure "utilisant" les MFC ne semble jamais passer en param�tre des fonctions de la Dll.
    Il y a donc des chances que les MFC ne soient utilis�es que dans le fichier VADAVIntf.cpp.

    Si c'est le cas, vous n'avez qu'a convertir "VADAVIntf.h/cpp" de MFC vers Qt.
    Pour "VADAVIntf.h", il suffirait de remplacer "#include <afxwin.h>" par l'include Qt correspondant � la fen�tre Qt et de changer la structure "tCallBackRec" pour remplacer le CWnd* par un pointeur sur une fen�tre Qt.

    Avec un peu de chance, les modifications dans "VADAVIntf.cpp" peuvent �tre assez simple.

  13. #13
    Membre � l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    6
    D�tails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2008
    Messages : 6
    Par d�faut
    Merci pour votre aide et vos suggestions je vais devoir �tudier vos proposition et faire des tests mais je ne pourrais pas vous faire un retour rapidement car j'ai des imp�ratifs r�dactionnel et encore quelques examen � pr�parer.

    Je pense commencer par tester la solution de M�dinoc, une dll encapsulant une dll, avant de me lancer dans la modification des fichiers fournis par le fabricant.

    Je vous remercie de votre int�r�t et pour vos solutions qui me seront d'un grand secours (m�me si je pense avoir encore pas mal de chemin pour r�ussir la mise en �uvre )

    A bient�t.

  14. #14
    Expert confirm�
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2005
    Messages
    5 507
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 5 507
    Par d�faut
    Je pense qu'il faudrait mieux commencer par ma suggestion.
    Si �a marche, c'est un quick-win, sinon on est vite pr�venu que �a ne marchera pas.
    Avec la solution de M�dinoc, il y a beaucoup plus de chance que �a marche mais cela demande un travail initial non n�gligeable.

Discussions similaires

  1. R�ponses: 1
    Dernier message: 28/01/2011, 12h11
  2. int�grer google maps dans son projet
    Par miya dans le forum Flex
    R�ponses: 11
    Dernier message: 17/04/2009, 19h04
  3. Int�grer le framework dans un projet
    Par costaupo dans le forum G�n�ral Dotnet
    R�ponses: 1
    Dernier message: 16/03/2007, 10h57
  4. R�ponses: 1
    Dernier message: 02/03/2007, 21h55
  5. [MFC] Utiliser la MFC dans un projet ATL
    Par glKabuto dans le forum MFC
    R�ponses: 6
    Dernier message: 24/04/2006, 15h17

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