vererbung aus dll heraus



  • hallo zusammen,

    muss man etwas bestimmtes beachten, wenn bei einer vererbung die baseClass in einer dll liegt, die erbende klasse aber außerhalb? ich habe die baseClass normal mit __declspec(dllexport) sichtbar gemacht, bekomme jetzt aber 0xC0000005: Zugriffsverletzung.

    oder geht das vielleicht gar nicht?
    danke!



  • Die DLL und der konsumierende Code muss mit exact demselben Compiler kompiliert und gelinkt sein. Ausserdem Debug zu Debug, Release zu Release, etc.

    Simon



  • hi simon,

    danke für den tip! ich schreibe sowohl dll als auch app selber und kompiliere, das dürfte also nicht das problem sein.
    hast du noch eine andere idee?

    danke!



  • Zeig mal ein bisschen Code. Wäre von Vorteil. Du bekommst ja eine AccVio das hat dann nix mehr mit dem kompilieren oder linken zu tun.



  • ok, ich bin beim erstellen eines minimalen beispiels schon ein stück weiter gekommen,das problem kann ich mir aber nicht erklären. eventuell muss dieser post in das wxWidgets forum verschoben werden.

    in der app habe ich folgendes:

    #include "basedll.h"
    class testClass : public libconfig::testBase {
    public:
        testClass(wxWindow *parent) : libconfig::testBase(parent){};
    };
    

    basedll.h:

    namespace libconfig {
    
    class __declspec(dllexport) testBase : public wxPanel {
    public:
        testBase( wxWindow* par ){};
    };
    
    }
    

    wenn ich den ctor aus basedll.h in basedll.cpp (inkl. using namespace libconfig; )auslagere, dann kommt folgender fehler, sonst nicht:

    >    libConfig.dll!wxWinHashTable::Get(long key=1378044)  Zeile 596 + 0x17 Bytes    C++
         libConfig.dll!wxFindWinFromHandle(void * hWnd=0x001506fc)  Zeile 3434    C++
         libConfig.dll!wxAssociateWinWithHandle(HWND__ * hWnd=0x001506fc, wxWindow * win=0x027fb468)  Zeile 3443 + 0x9 Bytes    C++
         libConfig.dll!wxWindow::SubclassWin(void * hWnd=0x001506fc)  Zeile 1146 + 0xd Bytes    C++
         libConfig.dll!wxWindow::MSWCreate(const wchar_t * wclass=0x103b5060, const wchar_t * title=0x00000000, const wxPoint & pos={...}, const wxSize & size={...}, unsigned long style=1375731712, unsigned long extendedStyle=65536)  Zeile 3616    C++
         libConfig.dll!wxWindow::Create(wxWindow * parent=0x027fae00, int id=-1, const wxPoint & pos={...}, const wxSize & size={...}, long style=2621440, const wxString & name={...})  Zeile 612 + 0x21 Bytes    C++
         libConfig.dll!wxPanel::Create(wxWindow * parent=0x027fae00, int id=-1, const wxPoint & pos={...}, const wxSize & size={...}, long style=2621440, const wxString & name={...})  Zeile 117 + 0x20 Bytes    C++
         libConfig.dll!wxPanel::wxPanel(wxWindow * parent=0x027fae00, int winid=-1, const wxPoint & pos={...}, const wxSize & size={...}, long style=2621440, const wxString & name={...})  Zeile 58    C++
         libConfig.dll!libconfig::testBase::testBase(wxWindow * par=0x027fae00)  Zeile 281 + 0x7d Bytes    C++
         myapp.exe!testClass::testClass(wxWindow * parent=0x027fae00)  Zeile 41 + 0x13 Bytes    C++
    


  • ich habe die frage ins wxWidgets forum verschoben, kann hier gelöscht werden.


Anmelden zum Antworten