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_HVielen 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 VariableWoran 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?