Quelltextaufteilung, Headerdatei



  • Hallo,
    ich habe ein Problem mit der Aufteilung der Quelltexte. Und zwar habe ich eine Funktion, die mir eine DLL einbindet.
    Dazu habe ich eine Header-Datei com.h:

    #ifndef _PORTDLL_
    #define _PORTDLL_
    #include <vcl.h>
    
    HINSTANCE hdll;
    typedef UINT(CALLBACK *open)(char *);
    open opencom;
    typedef UINT (CALLBACK *read)();
    read readbyte;
    typedef (CALLBACK *send)(UCHAR);
    send sendbyte;
    typedef (CALLBACK *close)();
    close closecom;
    typedef (CALLBACK *time_)(UINT);
    time_ timeout;
    typedef (CALLBACK *rts_)(WORD);
    rts_ rts;
    typedef (CALLBACK *txd_)(WORD);
    txd_ txd;
    typedef (CALLBACK *dtr_)(WORD);
    dtr_ dtr;
    bool ladeDLL(void);
    #endif
    

    und eine dazugehörige com.c:

    bool ladeDLL(void)
    {
      hdll = LoadLibrary("Port.dll");
      if(hdll == NULL)
      {
          return false;
      }
      else
      {
          opencom = (open)GetProcAddress(hdll,"OPENCOM");
          readbyte = (read)GetProcAddress(hdll,"READBYTE");
          sendbyte = (send)GetProcAddress(hdll,"SENDBYTE");
          closecom = (close)GetProcAddress(hdll,"CLOSECOM");
          timeout = (time_)GetProcAddress(hdll,"TIMEOUT");
          rts = (rts_)GetProcAddress(hdll,"RTS");
          txd = (txd_)GetProcAddress(hdll,"TXD");
          dtr = (dtr_)GetProcAddress(hdll,"DTR");
          return true;
      }
    }
    

    Dem Projekt habe ich die com.c hinzugefügt, beim kompilieren erhalte ich jedoch die Fehlermeldung
    [C++ Fehler] com.c(1): E2141 Fehler in der Deklarationssyntax

    Wo liegt der Fehler? In meinem Hauptprogramm habe ich die com.h mit #include "com.h" eingebunden

    Danke, Thomas



  • Handelt es sich evtl. um ein C-Projekt? (also nicht C++?)

    In C gibt es den Datentyp bool nicht. Stattdessen solltest du int verwenden.



  • Also mit int bekomme ich das auch nicht übersetzt.
    Die Fehlermeldungen sind dann aber andere:

    E2451 Undefiniertes Symbol 'hdll'

    Ich hatte vorher alles zusammen einfach in eíne Datei "com.h" geschrieben, die ich in meiner Unit1.cpp mit #include eingebunden habe, und da gab es keine Fehlermeldungen und ich konnte die Funktionen aus der dll auch benutzen.



  • Thomas_v2.1 schrieb:

    E2451 Undefiniertes Symbol 'hdll'

    Wie soll der das kennen, wenn Du die com.h nicht includierst?
    😃 😃 😃 🕶 🕶 🕶



  • Ja, hatte ich auch gemacht, aber wenn ich die com.h in der com.c includiere bekomme ich gleich einen ganzen Rattenschwanz von Fehlermeldungen. Unter anderem taucht dann eine "sysmac.H" und andere auf, wo angeblich ein Fehler drin ist.

    Ist mein grundsätzlicher Aufbau der Header- und C-Datei denn richtig? Ansonsten muss es ja an irgendwelchen Projekteinstellungen liegen. Allerdings habe ich da noch nichts gefunden (weiß auch nicht so recht, wo ich da suchen soll)



  • nimm mal das vcl.h aus deiner com.h raus. wenn er dann rummeckert wegen WORD, UCHAR und UINT dann definiere die direkt im header neu oder binde windows.h ein.

    HINSTANCE hdll würde ich in die cpp packen, sonst bekommst du unschöne warnungen, wenn du die dll in mehreren units deines projektes benutzt.


Anmelden zum Antworten