skovv Temat założony przez niniejszego użytkownika |
[C++] Programowanie obiektowe i biblioteka *.dll- jak to połączyć? » 2010-08-25 12:52:33 Witam. Napisałem bibliotekę DLL tyle że zrobił mi się bajzel i chciałbym ją przepisać od nowa. Chciałbym aby kod nie wyglądał jak teraz: ExWindowCreate( ... ) ExWindowFind( ... )
lecz dzięki klasom mam nadzieje uzyskać coś takiego: Ex.Window.Create( ... ) Ex.Window.Find( ... )
Czy może ktoś napisać jak coś takiego zrobić? Pisałem do kolegi to kazał mi się wziąść za naukę c++( zaraz sobię powtórzę te klasy :D ). Skovv EDIT: o właśnie... sorki że zapomniałem tytułu |
|
pekfos |
» 2010-08-25 13:43:16 class ex { public: class window { public: void Create(); } Window; } Ex;
Ex.Window.Create(); |
|
skovv Temat założony przez niniejszego użytkownika |
» 2010-08-25 13:43:57 oO dzięki wielkie ;D Zaraz sprawdzę :D |
|
skovv Temat założony przez niniejszego użytkownika |
» 2010-08-25 15:19:26 Mam pewnie problem: Nie działa :/ Niby się kompiluje i powinno działać ale jednak nic z tego :/ Tworzę klasę: class Ex { public: class Win { public: HWND Create( char * TYTUL, int W, int H, int FLAGI ); HWND Find( char * KLASA, char * TYTUL ); bool SetName( HWND hWnd, char * TYTUL ); int MessageBox( HWND hWnd, char * TYTUL, char * WIADOMOSC, int FLAGI ); } Window; } ExtreX;
potem ją eksportuje class DLLIMPORT Ex { public: class DLLIMPORT Win { public: HWND Create( char * TYTUL, int W, int H, int FLAGI ); HWND Find( char * KLASA, char * TYTUL ); bool SetName( HWND hWnd, char * TYTUL ); int MessageBox( HWND hWnd, char * TYTUL, char * WIADOMOSC, int FLAGI ); } Window; } ExtreX;
i normalnie się kompiluje. Tworzę nowy projekt, linkuje itp i piszę: ExtreX.Window.MessageBox( NULL, "Info", "dziala", EX_FL_OK | EX_FL_INFORMATION );
i mam błąd: LINK : fatal error LNK1104: cannot open file 'libEx.lib'
Coś musi być z linkowaniem dlla? A może to dlatego że dll napisałem w dev c++ a testuję w visual c++ ? |
|
pekfos |
» 2010-08-25 18:12:41 środowisko nie robi różnicy. Linker nie może otworzyć pliku. To chyba nie jest błąd zależny od kodu. Sprawdź czy lib jest w porządku (nazwa, itp) |
|
skovv Temat założony przez niniejszego użytkownika |
» 2010-08-25 18:41:50 no właśnie chodzi o to że wszystko jest jak należy :/ Aktualnie kod dll'a wygląda tak: dll.h: class DLLEXPORT Ex { public: class Win { public: HWND Create( char * TYTUL, int W, int H, int FLAGI ); HWND Find( char * KLASA, char * TYTUL ); bool SetName( HWND hWnd, char * TYTUL ); int Message( HWND hWnd, char * TYTUL, char * WIADOMOSC, int FLAGI ); } Window; } ExtreX;
dll.cpp: #include "ExtreX.h"
HWND Ex::Win::Create( char * TYTUL, int W, int H, int FLAGI ) { ... }
HWND Ex::Win::Find( char * KLASA, char * TYTUL ) { ... } bool Ex::Win::SetName( HWND hWnd, char * TYTUL ) { ... } int Ex::Win::Message( HWND hWnd, char * TYTUL, char * WIADOMOSC, int FLAGI ) { ... }
BOOL APIENTRY DllMain( HINSTANCE hInst, DWORD reason, LPVOID reserved ) { switch( reason ) { case DLL_PROCESS_ATTACH: break; case DLL_PROCESS_DETACH: break; case DLL_THREAD_ATTACH: break; case DLL_THREAD_DETACH: break; } return TRUE; } Może gdzieś tu jest błąd? |
|
DejaVu |
» 2010-08-25 20:44:27 W Dev-C++ o ile się nie mylę można tworzyć projekt DLL'ki i tam chyba jest przykład utworzenia biblioteki *.dll właśnie z obsługą klas. Proponuję rozbudowywać stopniowo to co chcesz osiągnąć i stwierdzać co działa, a co niedziała. Dzięki temu nie będziesz szedł po omacku oraz będziesz potrafił sprecyzować dokładnie błąd i powiedzieć, "to nie działa, to działa i czy da się zrobić by to pierwsze działało". Obecnie wiesz, że nic nie działa ;p Ja Ci mogę powiedzieć, że dll'ka przykładowa w Dev-C++ działa i jest oparta o jedną klasę. Dawniej to testowałem. Dodam też, że nie testowałem dołączania libów wygenerowanych przez Dev-C++ w Visual C++. Proponuję przesiąść się na Visual C++ skoro i tak z niego korzystasz i w nim tworzyć DLL'ki. |
|
skovv Temat założony przez niniejszego użytkownika |
» 2010-08-25 20:59:09 Hmm... pomyślę nad przejściem na VC++ :) |
|
« 1 » |