Gateway_man Geschrieben 1. September 2012 Geschrieben 1. September 2012 Hi leute, ich war gerad am erweitern meines Cpp Frameworks und wollte kurz eine Klasse testen. Ergo fix die ne neue Consolen Anwendung erstellt und die Pfade für die Header und Lib files in den Projekteigenschaften eingetragen. So jetzt habe ich noch die entsprechende Header Datei includiert. (und die entsprechende Lib eingebunden). So weit so gut. Ich konnte auf alle Elemente zugreifen. Das sieht dann wie folgt aus: #pragma comment (lib, "Win32.System.lib") #include "stdafx.h" #include <Win32\System\wThread.h> #include <iostream> using namespace std; void TestFunction(); System::Threading::wThread* thread; int _tmain(int argc, _TCHAR* argv[]) { try { thread = new System::Threading::wThread(TestFunction); if (thread->Start()) { while (thread->IsRunning()) { Sleep(1000); } } } catch(ExceptionBase base) { cout << base.GetMessageW() << endl; } return 0; } void TestFunction() { for (int i = 0; i<=1000; i++) { cout << "Position" << " State ==> " << i << endl; } } Als ich den code aber compilieren wollte hab ich folgende Fehler bekommen: Fehler 2 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: bool __thiscall System::Threading::wThread::Start(void)" (?Start@wThread@Threading@System@@QAE_NXZ)" in Funktion "_wmain". E:\Programmierung\Cpp\LibTestConsole\LibTestConsole\LibTestConsole.obj Fehler 1 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: bool __thiscall System::Threading::wThread::IsRunning(void)" (?IsRunning@wThread@Threading@System@@QAE_NXZ)" in Funktion "_wmain". E:\Programmierung\Cpp\LibTestConsole\LibTestConsole\LibTestConsole.obj Fehler 3 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: __thiscall System::Threading::wThread::wThread(void (__cdecl*)(void))" (??0wThread@Threading@System@@QAE@P6AXXZ@Z)" in Funktion "_wmain". E:\Programmierung\Cpp\LibTestConsole\LibTestConsole\LibTestConsole.obj Fehler 4 error LNK1120: 3 nicht aufgelöste externe Verweise. E:\Programmierung\Cpp\LibTestConsole\Debug\LibTestConsole.exe 1 Der Inhalt der wThread.h Datei sieht wie folgt aus: #pragma once #pragma comment (lib, "Kernel32.lib") #pragma comment (lib,"hException.lib") #include<Windows.h> #include <Base\baseDef.h> #include <hException\ExceptionBase.h> #include <WinBase.h> namespace System { namespace Threading { #define INVALID_FUNC_POINTER "The function pointer can't be reffering to 0!" #define WTHREAD_INIT_FAILED "Thread creation failed. Check the error code!" enum _export wThreadState{None = 0x1, Running=0x2, Aborted=0x3, Stopped=0x4, Suspended = 0x5 }; class _export wThread { private: wThreadState state; HANDLE handle; LPSECURITY_ATTRIBUTES sAttr; SIZE_T stackSize; LPVOID lpParameter; DWORD creationFlag; LPDWORD threadID; void (*main) (void*); void (*mainW) (); public: wThread(void (*_main)(void*), void* args); wThread(void (*_mainW)()); wThread(void (*_main)(void*), SIZE_T StackSize, void* args); wThread(void (*_mainW)(), SIZE_T StackSize); wThread(LPSECURITY_ATTRIBUTES SecAttr, void (*_main)(void*), SIZE_T StackSize, void* args); wThread(LPSECURITY_ATTRIBUTES SecAttr, void (*_mainW)(), SIZE_T StackSize); ~wThread(void); wThreadState CurrentState(); HANDLE CurrentThreadHandle(); bool Start(); bool Abort(); bool Suspend(); bool Resume(); bool IsRunning(); }; } } Hinter _export verbirgt sich: #define _export __declspec(dllexport) Die dll mit der Klasse wThread compiliert ohne zu murren. Also vermute ich das ich irgendwelche Fehler beim linken oder sonstiges gemacht habe. Fällt euch was ins Auge? Lg Gateway Zitieren
flashpixx Geschrieben 1. September 2012 Geschrieben 1. September 2012 sieht ja nach MSVC aus, schon mal die Linker Optionen geprüft, vor allem die Flags /MD bzw /MT ? Zitieren
Gateway_man Geschrieben 1. September 2012 Autor Geschrieben 1. September 2012 (bearbeitet) Hi, sollte passen. Ist aktuell auf /MD gesetzt. Ah okay seh grad ich müsst es auf /LD stellen oder? Lg Gateway Bearbeitet 1. September 2012 von Gateway_man Zitieren
Klotzkopp Geschrieben 1. September 2012 Geschrieben 1. September 2012 In dem Programm, das die DLL nutzen soll, muss _export als __declspec(dllimport) definiert werden. Üblicherweise macht man das in Abhängigkeit von einem weiteren Präprozessorsymbol, das im DLL-Projekt definiert wird, und ansonsten eben nicht. Zitieren
Gateway_man Geschrieben 1. September 2012 Autor Geschrieben 1. September 2012 (bearbeitet) In dem Programm, das die DLL nutzen soll, muss _export als __declspec(dllimport) definiert werden. Üblicherweise macht man das in Abhängigkeit von einem weiteren Präprozessorsymbol, das im DLL-Projekt definiert wird, und ansonsten eben nicht. In dem Header wThread.h wird der BaseDef header inkludiert. In dem header ist bereits _export definiert. Eigentlich sollte das doch reichen? Denn der Headerinhalt wird ja zur compilezeit reinkopiert. Oder hab ich das falsch verstanden? Das _export Symbol ist jedenfall in der Consolen Anwendung nutzbar (wird in der Intellisense liste aufgeführt). lg Gateway EDIT: Jetzt hab ich erst geschnallt was du meinst . Habs ausprobiert aber hat leider nichts genützt. Eventuell hab ich es an der falschen stelle eingefügt. Ich werds heute abend nochmal etwas austesten. Bearbeitet 1. September 2012 von Gateway_man Zitieren
Gateway_man Geschrieben 1. September 2012 Autor Geschrieben 1. September 2012 Sry für doppelpost. Habs jetzt aber so eingerichtet wie du gemeint hast. Jetzt haben sich die Fehlermeldung geringfügig geändert: Fehler 2 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""__declspec(dllimport) public: bool __thiscall System::Threading::wThread::Start(void)" (__imp_?Start@wThread@Threading@System@@QAE_NXZ)" in Funktion "_wmain". E:\Programmierung\Cpp\LibTestConsole\LibTestConsole\LibTestConsole.obj Fehler 1 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""__declspec(dllimport) public: bool __thiscall System::Threading::wThread::IsRunning(void)" (__imp_?IsRunning@wThread@Threading@System@@QAE_NXZ)" in Funktion "_wmain". E:\Programmierung\Cpp\LibTestConsole\LibTestConsole\LibTestConsole.obj Fehler 3 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""__declspec(dllimport) public: __thiscall System::Threading::wThread::wThread(void (__cdecl*)(void))" (__imp_??0wThread@Threading@System@@QAE@P6AXXZ@Z)" in Funktion "_wmain". E:\Programmierung\Cpp\LibTestConsole\LibTestConsole\LibTestConsole.obj Fehler 4 error LNK1120: 3 nicht aufgelöste externe Verweise. E:\Programmierung\Cpp\LibTestConsole\Debug\LibTestConsole.exe 1 Statt dllexport meckert er jetzt wegen dllimport rum. Hm ich verstehs nicht. Die dll's greifen ja auch untereinander aufeinander zu. Und die lassen sich alle reibungslos compilieren. Lg Gateway Zitieren
Klotzkopp Geschrieben 1. September 2012 Geschrieben 1. September 2012 Hast du die Importbibliothek der DLL dazugelinkt? Zitieren
Gateway_man Geschrieben 2. September 2012 Autor Geschrieben 2. September 2012 Hast du die Importbibliothek der DLL dazugelinkt? Ja eigentlich schon: #pragma comment (lib, "Win32.System.lib") Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.