Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Programowanie obiektowe i biblioteka *.dll- jak to połączyć?

Ostatnio zmodyfikowano 2010-08-25 20:59
Autor Wiadomość
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
P-21176
pekfos
» 2010-08-25 13:43:16
C/C++
class ex {
public:
    class window {
    public:
        void Create();
    } Window;
} Ex;

//..
Ex.Window.Create();
P-21181
skovv
Temat założony przez niniejszego użytkownika
» 2010-08-25 13:43:57
oO dzięki wielkie ;D Zaraz sprawdzę :D
P-21182
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ę:
C/C++
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
C/C++
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ę:
C/C++
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++ ?
P-21189
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)
P-21203
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:
C/C++
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:
C/C++
#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?
P-21205
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.
P-21232
skovv
Temat założony przez niniejszego użytkownika
» 2010-08-25 20:59:09
Hmm... pomyślę nad przejściem na VC++ :)
P-21235
« 1 »
  Strona 1 z 1