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 :

Interfacer C++ et Fortan (VC++6)


Sujet :

MFC

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    30
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 30
    Par d�faut Interfacer C++ et Fortan (VC++6)
    Salut j'ai un petit soucis de link dans une appli...
    C'est une appli en C/C++ avec des appels � du fortran. Et dans le fortran il y a aussi des appels � du C++, et c'est l� qu'arrive mon probl�me...

    j'ai trouv� un sujet qui semblait correspondre � mon probl�mes mais �a ne marche toujours pas

    voici mon erreur :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    ferfa.obj : error LNK2001: unresolved external symbol _ferfa_c_
    Je compile sous Visual C++ 6,
    voici mes options de compil (.dsp)
    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
    # PROP BASE Use_MFC 0
    # PROP BASE Use_Debug_Libraries 0
    # PROP BASE Output_Dir "clc___Win32_Debug"
    # PROP BASE Intermediate_Dir "clc___Win32_Debug"
    # PROP BASE Ignore_Export_Lib 0
    # PROP BASE Target_Dir ""
    # PROP Use_MFC 0
    # PROP Use_Debug_Libraries 0
    # PROP Output_Dir "../lib/Debug"
    # PROP Intermediate_Dir "clc___Win32_Debug"
    # PROP Ignore_Export_Lib 0
    # PROP Target_Dir ""
    # ADD BASE F90 /browser /compile_only /dll /nologo /warn:nofileopt
    # ADD F90 /browser /check:bounds /compile_only /convert:ibm /debug:full /iface:cref /include:"clc___Win32_Debug/" /dll /libs:dll /nologo /reentrancy:threaded /threads /warn:argument_checking /warn:nofileopt
    # SUBTRACT F90 /noaltparam
    # ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "../include" /I "$(CASROOT)/inc" /D "WNT" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CLC_EXPORTS" /FR /YX /FD /c
    # ADD CPP /nologo /MD /w /W0 /Gm- /GX /ZI /Od /I "../include" /I "$(CASROOT)/inc" /I "../include/libxml" /D "WNT" /D "WIN32" /D "DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CLC_EXPORTS" /FR /YX /FD /c
    # SUBTRACT CPP /WX
    # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
    # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
    # ADD BASE RSC /l 0x419 /d "NDEBUG"
    # ADD RSC /l 0x419 /d "NDEBUG"
    BSC32=bscmake.exe
    # ADD BASE BSC32 /nologo
    # ADD BSC32 /nologo
    LINK32=link.exe
    # ADD BASE LINK32 TKIGES.lib TKXSBase.lib TKShHealing.lib TKernel.lib TKMath.lib TKG2d.lib TKG3d.lib TKGeomBase.lib TKBRep.lib TKGeomAlgo.lib TKTopAlgo.lib TKBool.lib TKFillet.lib TKOffset.lib TKFeat.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"../lib/sumokernel_clc.dll" /libpath:"$(CASLIB)"
    # SUBTRACT BASE LINK32 /pdb:none
    # ADD LINK32 TKIGES.lib TKXSBase.lib TKShHealing.lib TKernel.lib TKMath.lib TKG2d.lib TKG3d.lib TKGeomBase.lib TKBRep.lib TKGeomAlgo.lib TKTopAlgo.lib TKBool.lib TKFillet.lib TKOffset.lib TKFeat.lib libxml2.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:yes /debug /machine:I386 /out:"../lib/Debug/kernel_clc.dll" /pdbtype:sept /libpath:"$(CASLIB)" /libpath:"../include/libxml"
    # SUBTRACT LINK32 /pdb:none
    fichier export1.h
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
    #ifndef Standard_EXTERNC_ 
    # define Standard_EXTERNC_ extern "C"
    #endif
    fichier fortran.h
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    #define ferfa_ FERFA
    Standard_EXTERNC_ void ferfa_(void);
    Voici l'appel de la fonction en fortran
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    BaseAu.cxx
    #include <fortran.h>
    ...
    int fermerBaseAu(void)
    { 
      ...
      ferfa_();
      //FERFA();
      ...
    }
    Voici ma fonction fortan qui appelle du C
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ferfa.f
          SUBROUTINE FERFA
    	INCLUDE "wininter.inc"
          INTEGER CODE
          CODE=0
     
          CALL FERFA_C(CODE)
     
          RETURN
          END
    et le fichier wininter.inc inclus
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    ...
    C---------------------------------------------------
    C Interface FORTRAN / C pour la fonction FERFA_C 
    C---------------------------------------------------
          INTERFACE
          FUNCTION FERFA_C(CODE)
    !DEC$ ATTRIBUTES C , ALIAS:'_ferfa_c_' :: FERFA_C
          INTEGER CODE
    !DEC$ ATTRIBUTES REFERENCE ::CODE
          END FUNCTION FERFA_C
          END INTERFACE
    ...
    ... et la fonction C++ appel�e
    fichier Au.cxx
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    void ferfa_c_(int * code)
    {
        printf("--> ferfa_c_");
        ...
    }
    ce qui me donne cette sublime erreur de link

    Quelqu'un aurait-il une solution svp?

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    30
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 30
    Par d�faut
    j'ai plus ou moins trouv� une r�ponse, en renommant mon fichier Au.cxx en Au.c... (plus d'erreur de link)
    Par contre je ne sais pas pourquoi �a ne marche pas avec le .cxx, donc si quelqu'un peut m'�clairer, je lui serais reconnaissant

  3. #3
    Membre chevronn� Avatar de stephdim
    Profil pro
    Inscrit en
    Ao�t 2007
    Messages
    462
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Ao�t 2007
    Messages : 462
    Par d�faut
    Il faut faire attention aux conventions d'appel des fonctions lors d'une importation / exportation :

    il y a __cdecl, __stdcall et __fastcall

    Chaque type donne lieu a une decoration du nom differente (un _ ou un @ en pr�fixe ...)

    --> se r�f�rer a l'aide en ligne de VS pour plus de d�tails.

    ou ici : http://www.codeproject.com/cpp/calli...emystified.asp

    Mais je pense que �a peut venir de l�

    @+

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    30
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 30
    Par d�faut
    salut,
    Merci pour ta r�ponse
    Effectivement �a pourrait venir des conventions d'appel puisque j'essaie d'int�grer du code avec des __cdecl, � du code avec des __stdcall.
    J'ai fait quelques tests en mettant du __stdcall, et en repassant les extensions de mes nouveaux fichier � cxx, mais �a n'a rien donn�... Je en sais pas si j'ai loup� quelquechose, mais je me dit que tant pis, apr�s tout �a a l'air de marcher en gardant des fichiers .c alors je ne vais pas passer plus de temps sur ce probl�me... parce que j'en ai d'autres maintenant ^^.

Discussions similaires

  1. [VB6] [Interface] ComboBox à plusieurs colonnes
    Par mtl dans le forum VB 6 et ant�rieur
    R�ponses: 7
    Dernier message: 30/03/2004, 17h35
  2. [VB6] [Interface] Horloge 7 segments
    Par selenay dans le forum VB 6 et ant�rieur
    R�ponses: 11
    Dernier message: 07/10/2002, 16h15
  3. interface utilisateur avec OpenGL
    Par demis20 dans le forum OpenGL
    R�ponses: 6
    Dernier message: 03/10/2002, 12h27
  4. [VB6] [Interface] Tester le Type de Controle
    Par SpaceFrog dans le forum VB 6 et ant�rieur
    R�ponses: 9
    Dernier message: 16/09/2002, 09h51
  5. [VB6] [Interface] Icones de boutons de barre d'outils
    Par elifqaoui dans le forum VB 6 et ant�rieur
    R�ponses: 9
    Dernier message: 13/09/2002, 15h50

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