Headerdatei einbinden in DLL



  • Hallo,

    ich komme hier einfach nicht mehr. Würde mich sehr freuen, wenn mir jemand weiterhelfen könnte.

    Ich habe ein Programm in der Konsole geschrieben und getestet - es hat soweit alles funktioniert.

    Nun will ich aus den Header- und Programmdateien eine DLL-Projekt machen.
    Es kommen dann eine unmenge Fehler:

    Bibliothek Debug/PavisS7.lib und Objekt Debug/PavisS7.exp wird erstellt
    PavisS7.exp : warning LNK4070: Die Direktive /OUT:PacisBackup.dll in .EXP weicht vom Ausgabedateinamen "Debug/PavisS7.dll" ab; Direktive wird ignoriert
    Download.obj : error LNK2001: Nichtaufgeloestes externes Symbol _send@16
    Initialization.obj : error LNK2001: Nichtaufgeloestes externes Symbol _send@16
    QueryBlocks.obj : error LNK2001: Nichtaufgeloestes externes Symbol _send@16
    Upload.obj : error LNK2001: Nichtaufgeloestes externes Symbol _send@16
    Download.obj : error LNK2001: Nichtaufgeloestes externes Symbol _htons@4
    Initialization.obj : error LNK2001: Nichtaufgeloestes externes Symbol _htons@4
    QueryBlocks.obj : error LNK2001: Nichtaufgeloestes externes Symbol _htons@4
    Upload.obj : error LNK2001: Nichtaufgeloestes externes Symbol _htons@4
    Download.obj : error LNK2001: Nichtaufgeloestes externes Symbol _recv@16
    Initialization.obj : error LNK2001: Nichtaufgeloestes externes Symbol _recv@16
    QueryBlocks.obj : error LNK2001: Nichtaufgeloestes externes Symbol _recv@16
    Upload.obj : error LNK2001: Nichtaufgeloestes externes Symbol _recv@16
    Initialization.obj : error LNK2001: Nichtaufgeloestes externes Symbol _connect@12
    Initialization.obj : error LNK2001: Nichtaufgeloestes externes Symbol _inet_addr@4
    Initialization.obj : error LNK2001: Nichtaufgeloestes externes Symbol _WSACleanup@0
    Initialization.obj : error LNK2001: Nichtaufgeloestes externes Symbol _WSAGetLastError@0
    Initialization.obj : error LNK2001: Nichtaufgeloestes externes Symbol _socket@12
    Initialization.obj : error LNK2001: Nichtaufgeloestes externes Symbol _WSAStartup@8
    Debug/PavisS7.dll : fatal error LNK1120: 9 unaufgeloeste externe Verweise
    Fehler beim Ausführen von link.exe.
    
    PavisS7.dll - 19 Fehler, 10 Warnung(en)
    

    Hier noch ein kleiner Codeausschnitt:

    #include <windows.h>
    #include "Download.h"
    #include "Initialization.h"
    #include "Upload.h"
    #include "QueryBlocks.h"
    
    // Exportierte Funktionen
    int _stdcall QueryBlocks(char*,unsigned char ,unsigned char , unsigned char ,unsigned char,unsigned char ,unsigned char );
    
    BOOL WINAPI DllEntryPoint ( HINSTANCE hDLL, DWORD dwREASON, LPVOID Reserved )
    {
        switch (dwREASON)
        { 
            case DLL_PROCESS_ATTACH: { break; }		
            case DLL_PROCESS_DETACH: { break; } 		 
        }
        return TRUE;
    }
    
    int _stdcall QueryBlocks(char* strIpPCU,unsigned char bytSlotNrPCU,unsigned char bytRackNrPCU, unsigned char abyteBlocksDB[],unsigned char abyteBlocksFB[],unsigned char abyteBlocksFC[],unsigned char abyteBlocksOB[])
    {
    return 1;
    }
    

    So sieht z.B. die Headerdatei Initialization aus

    #ifndef INITIALIZATION_H
    #define INITIALIZATION_H
    
    #include <windows.h>
    #include <winsock.h>
    #include <iostream>
    
    // Fehlercodes
    #define CONNECTION_ERROR 0001
    #define CONNECTED 1111
    
    class cInitialization
    {
    public:
    	int fConnectToPlc(char chIpAddress[], unsigned char bytSlotNumber, unsigned char bytRackNumber);
    	static SOCKET ConnectSocket;
    private:
    //	static char chIpAddress[15]; 
    	static int uErrorCode;
    	static unsigned char bytRackNumber;
    	static unsigned char bytSlotNumber;
    
    private:
    	int fConnectToPlcRecive();
    
    };
    
    #endif INITIALIZATION_H
    

    Vielen Dank im voraus
    Gruß Tupo13



  • Ok Tut mir leid - Sorry

    Ich habe vergessen die ws2_32.lib einzubinden ich Idiot.

    Ich hätte da aber noch eine weitere Frage:

    ich habe z.B. eine Klasse cTest

    ein Objekt der Klasse erzeuge ich dann doch so:

    cTest t1;
    

    und Verwenden tu ich es doch dann z.B. so

    t1.Test();
    

    Dann bekomme ich aber immer folgende Warnung:

    :\paviss7\test.cpp(581) : warning C4101: 't1' : Unreferenzierte lokale Variable
    

    Woran liegt das? ich kann dem Objekt beim erzeugen doch keinen Wert zuweisen - oder doch?

    Gruß Tupo13



  • Die Warnung bedeutet, daß deine Variable 't1' zwar deklariert, aber nicht verwendet wird (also stuft der Compiler sie als überflüssig ein). Kannst du mal den Zusammenhang posten, in dem sie auftaucht?



  • @ CStoll
    danke für deine Antwort:

    also eine Funktion der DLL sieht z.B. so aus:

    int _stdcall QueryBlocks(char* strIpPCU,unsigned char bytSlotNrPCU,unsigned char bytRackNrPCU, unsigned char abyteBlocksDB[],unsigned char abyteBlocksFB[],unsigned char abyteBlocksFC[],unsigned char abyteBlocksOB[])
    {
    int iretVal;
    
    cInitialization i1;
    i1.fConnectToPlc(strIpPCU,bytSlotNrPCU,bytRackNrPCU);
    
    cQueryBlocks q1;
    iretVal = q1.fDoQueryBlocks(&abyteBlocksDB[0],&abyteBlocksFB[0],&abyteBlocksFC[0],&abyteBlocksOB[0]);
    
    return iretVal;
    }
    

    Hier bekomme ich dann für q1 und i1 diesen Fehler:
    q1 und i1 werden sonst niergends verwendet



  • Das ist kein Fehler, nur eine Warnung 😉

    Kann es eventuell sein, daß du dort nur statische Methoden von i1 bzw. q1 aufrufst?


Anmelden zum Antworten