DLL_EXPORT funktioniert plötzlich nicht mehr?!



  • Ich sage dir, dass du an Headerdateien nichts ablesen kannst, und du zeigst mehr Headerdateien 🙄

    Interessant ist, was in tubedataprintout.cpp passiert.

    Grundsätzlich finde ich es seltsam, DLL_EXPORT überhaupt in einem Header zu definieren.



  • in der cpp datei ist nicht viel los:

    #include "tubedataprintout.h"
    
    using namespace libClientOutput;
    
    void TubeDataPrintout::GetPageInfo(int *minPage, int *maxPage, int *selPageFrom, int *selPageTo)
    {
    	//*minPage = 1;
    	//*maxPage = getTubeDataPanel()->getChosenObject()->getPages()->size();
    	//*selPageFrom = fromTo.x;
    	//*selPageTo = fromTo.y;
    }
    

    das seltsame ist auch, dass ich das auf genau dieselbe art in etlichen anderen dlls mache, nur hier bekomme ich einen fehler. deswegen meine anfängliche vermutung, dass visual studio das problem sein könnte?



  • Definiere DLL_EXPORT in der .cpp bevor du deine Header includest.



  • danke, hat leider nichts geändert:

    #define DLL_EXPORT
    
    #include "tubedataprintout.h"
    
    using namespace libClientOutput;
    
    void TubeDataPrintout::GetPageInfo(int *minPage, int *maxPage, int *selPageFrom, int *selPageTo)
    {
    	//*minPage = 1;
    	//*maxPage = getTubeDataPanel()->getChosenObject()->getPages()->size();
    	//*selPageFrom = fromTo.x;
    	//*selPageTo = fromTo.y;
    }
    

    fehlermeldung:

    2>..\src\tubedataprintout.cpp(13): warning C4273: 'libClientOutput::TubeDataPrintout::GetPageInfo': Inkonsistente DLL-Bindung.
    2> c:\ecworks_mep\libclientoutput\src\tubedataprintout.h(28): Siehe vorherige Definition von 'GetPageInfo'

    eigenartig ist auch, dass in einer neu erstellten testklasse alles ok zu sein scheint:http://gemini-sites.de/forumImages/dll03.gif



  • Wenn du Code weglässt, solltest du prüfen, ob das, was übrig ist, das Problem noch reproduziert.



  • extrem minimalisiert:
    das hier funktioniert:

    #ifndef __TEST1__
    #define __TEST1__
    
    #define DLL_EXPORT
    #include "global_cliout.h"
    
    namespace libClientOutput{
    	class DECLDIR_CLI_OUT test1{
    
    	public:
    		void GetPageInfo(int *minPage, int *maxPage, int *selPageFrom, int *selPageTo);
    
    	};
    
    }
    
    #endif
    
    #include "test.h"
    
    void libClientOutput::test1::GetPageInfo(int *minPage, int *maxPage, int *selPageFrom, int *selPageTo)
    {
    
    }
    

    aber das hier nicht:

    #ifndef __LIB_CLIENT_OUTPUT_PRINTOUT__
    #define __LIB_CLIENT_OUTPUT_PRINTOUT__
    
    #define DLL_EXPORT
    #include "global_cliout.h"
    
    namespace libClientOutput {
    
    	class DECLDIR_CLI_OUT TubeDataPrintout {
    	public:
    
    		void GetPageInfo(int *minPage, int *maxPage, int *selPageFrom, int *selPageTo);
    	private:
    	};
    
    }
    
    #endif
    
    #include "tubedataprintout.h"
    
    void libClientOutput::TubeDataPrintout::GetPageInfo(int *minPage, int *maxPage, int *selPageFrom, int *selPageTo)
    {
    }
    

    😕

    UPDATE: ein neuer hinweis: test1 funktioniert nicht mehr wenn ich die dateien in denselben ordner wie die anderen dateien der dll kopiere, auf dem desktop war alles ok!



  • mael15 schrieb:

    test1 funktioniert nicht mehr wenn ich die dateien in denselben ordner wie die anderen dateien der dll kopiere, auf dem desktop war alles ok!

    Wahrscheinlich hast du in deinen Include-Verzeichnissen Dateien mit demselben Namen, aber unterschiedlichem Inhalt herumliegen.



  • MFK schrieb:

    Wahrscheinlich hast du in deinen Include-Verzeichnissen Dateien mit demselben Namen, aber unterschiedlichem Inhalt herumliegen.

    das war tatsächlich der fall. daraufhin habe ich:
    - allen global.h einen individuellen namen gegeben
    - die includes entsprechend angepasst
    - die gesamt projektmapp mit allen dlls bereinigt
    - alle vorkompilierten header neu erstellt
    leider ist problem noch immer dasselbe. 😕



  • Ohne Einsicht in die ganze Projektmappe finden wir das wohl nicht. Darum ein grundsätzlicher Rat: DLL_EXPORT solltest du in den Projekteinstellungen der DLL definieren, nicht in irgendwelchen Headerdateien. Die Gefahr ist viel zu groß, dass du es irgendwo vergisst, oder dass irgendein Programm, das die DLL benutzen soll, so einen Header verwendet.

    Alternativ kannst du es in allen .cpp-Dateien der DLL, vor allen Include-Direktiven definieren. Aber auch das ist fehleranfällig.



  • das problem ist gelöst. ich hatte eine header datei, die vor dem include der global.h kein DLL_EXPORT definiert hatte. durch eine änderung der buildreihenfolge wurde diese datei plötzlich zuerst bearbeitet, sodass dann spätere DLL_EXPORT nicht mehr den gedachten effekt hatten.

    MFK schrieb:

    DLL_EXPORT solltest du in den Projekteinstellungen der DLL definieren, nicht in irgendwelchen Headerdateien.

    das werde ich definitiv machen, damit wäre das problem wohl nicht aufgetreten.
    danke für eure mühe!


Anmelden zum Antworten