functions.h vs. functions.dll



  • Hi,

    möglichweise ist die Frage blöd, aber das weiß man ja nie vorher :):

    ich möchte in meinem Projekt Funktionen in verschiedenen Forms benutzen. Dafür kann ich ja eine funktionen.h anlegen und da die Funktionen reinschreiben. Wenn ich die jetzt per
    #include "funktionen.h" include, dann erscheint immer ein Fehler.

    int ShowMessageBox(AnsiString Text,TMsgDlgType Icon) {
    

    [C++ Error] functionen.h(10): E2147 'AnsiString' cannot start a parameter declaration

    Der wäre aber egal, wenn man sowieso sagt, dass man sowas lieber mit einer DLL macht. Habe da jtzt paar Sachen zu im Forum gefunden, bin danach aber immer noch neutral 🙂

    Vielen Dank (auch für Hinweise auf Anleitungen etc.))

    chrisfs



  • da hast du sicher vergessen den passenden header (meist vcl.h) zu includen!



  • Hi,

    habe das jetzt so:

    functionen.h:

    #include <vcl.h>
    
    void function test() {
    }
    

    Programm:

    #include <vcl.h>
    #pragma hdrstop
    
    #include "teeprevi.hpp"
    #include "inifiles.hpp"
    //...
    #include "functionen.h"
    //...
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma link "PERFGRAP"
    #pragma link "CSPIN"
    #pragma link "CCALENDR"
    #pragma resource "*.dfm"
    TForm_MainForm *Form_MainForm;
    

    Jetzt öffnet sich "sysmac.H" an der Stelle:

    extern "C" {
    #pragma option push -vi // force inlining on
    

    Mit folgendem Fehler:
    [C++ Error] sysmac.H(50): E2040 Declaration terminated incorrectly
    [C++ Error] sysmac.H(145): E2141 Declaration syntax error
    [C++ Error] system.hpp(17): E2141 Declaration syntax error
    [C++ Error] dstring.h(17): E2141 Declaration syntax error
    [C++ Error] dstring.h(352): E2141 Declaration syntax error
    [C++ Error] rpcdce.h(43): E2257 , expected
    [C++ Error] rpcdce.h(44): E2257 , expected
    [C++ Error] rpcndr.h(927): E2139 Declaration missing ;
    [C++ Error] rpcndr.h(1143): E2139 Declaration missing ;
    [C++ Error] rpcndr.h(1144): E2238 Multiple declaration for 'handle_t'
    [C++ Error] rpcndr.h(1143): E2344 Earlier declaration of 'handle_t'
    [C++ Error] rpcndr.h(1144): E2139 Declaration missing ;
    [C++ Error] wstring.h(15): E2141 Declaration syntax error
    [C++ Error] systobj.h(23): E2141 Declaration syntax error
    [C++ Error] systobj.h(336): E2257 , expected
    [C++ Error] systobj.h(337): E2040 Declaration terminated incorrectly
    [C++ Error] systobj.h(338): E2040 Declaration terminated incorrectly
    [C++ Error] systobj.h(339): E2040 Declaration terminated incorrectly
    [C++ Error] systobj.h(340): E2040 Declaration terminated incorrectly
    [C++ Error] systobj.h(341): E2040 Declaration terminated incorrectly
    [C++ Error] systobj.h(342): E2040 Declaration terminated incorrectly
    [C++ Error] systobj.h(343): E2040 Declaration terminated incorrectly
    [C++ Error] systobj.h(344): E2040 Declaration terminated incorrectly
    [C++ Error] systobj.h(345): E2040 Declaration terminated incorrectly
    [C++ Error] systobj.h(346): E2040 Declaration terminated incorrectly
    [C++ Error] systobj.h(346): E2228 Too many error or warning messages

    😞 Muss ich da noch was anderes includen?

    danke 🙂 !!



  • Ok, ich hab jetzt mal ne andere Funktion in die functionen.h geschrieben und jetzt erscheint der Fehler

    [C++ Error] functionen.h(9): E2147 'TDBChart' cannot start a parameter declaration

    Es wird immer am ersten Parameter rumgemeckert 😞



  • void function test() {
    }

    was solln das sein? muss wohl eher so aussehen...

    void test()
    {
    }
    

    aber dann auch nicht im header, sondern in der zugehörigen cpp.

    1. neue unit anlegen und name verpassen
    2. in der cpp den code der funktionen schreiben
    3. im header lediglich die forward-deklaration (d.h. der funktionskopf)
    4. den header dort einbinden, wo du auf die funktionen zugreifen willst.

    beispiel:

    1. unit anlegen und unter funktionen.cpp speichern

    //---------------------------------------------------------------------------
    #include <vcl.h>
    //---------------------------------------------------------------------------
    #pragma hdrstop
    //---------------------------------------------------------------------------
    #include "funktionen.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    
    int Summe(int a, int b)
    {
      return a + b; 
    }
    

    2. im header dann

    //---------------------------------------------------------------------------
    #ifndef Unit2H
    #define Unit2H
    //---------------------------------------------------------------------------
    // header von TIniFile einbinden, wenn das in der Unit irgendwo benutzt wird
    #include <inifiles.hpp>  
    //---------------------------------------------------------------------------
    
    // forward-deklartion
    int Summe(int a, int b);
    
    //---------------------------------------------------------------------------
    #endif
    //---------------------------------------------------------------------------
    

    3. einbinden in andere units (hier unit1.cpp)

    //---------------------------------------------------------------------------
    #include <vcl.h>
    //---------------------------------------------------------------------------
    #pragma hdrstop
    //---------------------------------------------------------------------------
    #include "Unit1.h"
    #include "funktionen.h"   // <- einbinden des headers der unit mit funktionen
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    
    ...
    

    wenn du komponenten in der unit benutzt oder per funktion übergibst, musst du eventuell den passenden header einbinden, damit die deklaration gefunden werden kann. welcher header das ist, steht in der hilfe zur entsprechenden komponenten oder klasse.

    sunday



  • Hi,

    danke erstmal für deine ausführliche Antwort!

    Das war oben nur ein Tippfehler 🙂

    Es kommt leider immer noch der selbe Müll 😞

    functionen.cpp

    /*******************************************************************************
     * ShowMessageBox()
     * Zeigt eine Messagebox mit den gegebenen Parametern an. Der gedrückte Button
     * wird zurückgegeben.
     *
     * AnsiString   Enthält den Text, der in der Messagebox angezeigt wird
     * TMsgDlgType  Legt das Icon fest, das angezeigt werden soll
     *              mtWarning, mtError, mtInformation, mtConfirmation, mtCustom
     ******************************************************************************/
    int ShowMessageBox(AnsiString Text,TMsgDlgType Icon) {
       TMsgDlgButtons mdButtons;
       mdButtons << mbCancel << mbOK;
       return MessageDlg(Text, Icon ,mdButtons, 0);
    
    }
    

    functionen.h

    //--------------------------------------------------------------------------- 
    //#ifndef Unit2H
    //#define Unit2H
    
    #include <vcl.h> 
    //---------------------------------------------------------------------------
    ShowMessageBox(AnsiString Text,TMsgDlgType Icon);
    //--------------------------------------------------------------------------- 
    //#endif 
    //---------------------------------------------------------------------------
    

    Hauptprogramm cpp

    //...
    #include "functionen.h"
    //...
    

    Und jetzt geht wieder die blöde sysmac.H auf. Wenn ich das include<vcl.h> wegmache, erscheint:
    [C++ Error] functionen.h(7): E2147 'AnsiString' cannot start a parameter declaration

    Dann habe ich mal dstring.h included, weil die Datei in der Hilfe erwähnt wird. Dann erscheint aber wieder sysmac.H

    Ich kapier das echt nicht, bei meinem anderen Programm hat das wunderbar geklappt 😕

    DANKE weiterhin!!



  • Hast du schon mal probiert die functionen.h in der Header Datei einzubinden ??

    FGGF



  • ich hab jetzt alles in die functionen.h ohne includen geschrieben. Die functionen.h binde ich als letzte Header-Datei ein und es geht. Fragt mich nicht wieso, es ist mir auch egal 🙂 Hauptsache, es geht!

    DANKE FÜR EURE ANTWORTEN!!


Anmelden zum Antworten