2016-06-22 14 views
7

Ich arbeite gerade an einem Projekt mit altem, schlecht dokumentiertem Code und versuche, mich durch die verschiedenen .h-Dateien zu navigieren dass sie eine vollständige Dokumentation über die Verwendung aller enthaltenen Funktionen bereitgestellt haben (die Definitionen werden in .lib- und .dll-Dateien gespeichert). Einer der H-Dateien hat Funktionen die nicht nur deklariert werden, sondern entweder mit einfachen return-Anweisungen oder leer Aussagen als solcheGrund für "{return 0;}" oder "{;}" in der Bibliothek .h-Datei

class DLL ExampleLibraryClass { 
public: 
    int exampleGetValue() {return 0;} 
    void exampleSetValue(Type val) {;} 
    void exampleActionFxn() {;} 
}; 

Diese würden Funktionen definiert, die ich erwarte, dass aktuelle Variable Staaten zurückzukehren oder bestimmte Aktionen ausführen, deshalb verwirrt mich das.

Zusätzlich:

  • ich verwendet habe, Dependency Walker und festgestellt, dass jede Funktion eine passende Definition in einer DLL hat.

  • Das Keyword-DLL wurde mit

    #ifndef _PWSDLL_ 
    # define _PWSDLL_ 
    # define WINCALL _stdcall 
    # ifdef _USRDLL 
    #  define DLL __declspec(dllexport) 
    # else 
    #  define DLL __declspec(dllimport) 
    # endif 
    #endif 
    

    _USRDLL definiert nicht definiert ist und daher DLL als __declspec(dllimport)

Meine Frage über die offensichtliche Wirkung der leeren Definitionen weniger dreht definiert (die nichts machen und bereits auf SO diskutiert wurden) und mehr darüber, warum die .h-Datei auf diese Weise geschrieben wurde und wie man die Datei benutzt. Ist das eine übliche oder bekannte Praxis? Wird der Linker weiterhin nach Definitionen für die Funktion in meinen verknüpften Bibliotheken suchen? Gibt es andere Codeabschnitte, nach denen ich nach weiteren Hinweisen suchen sollte? Oder vielleicht im weitesten Sinne, wie soll ich darauf reagieren?

Vielen Dank, und bitte lassen Sie mich wissen, wenn Sie weitere Informationen benötigen, um dies zu adressieren, bin ich mir nicht sicher, was genau in dieser Angelegenheit wichtig ist.

EDIT: Hinzufügung vergessene Rückgabetypen im Beispielcode.

EDIT: Hinweis zur DLL-Definition hinzugefügt.

+3

Sind Sie sicher, dass der Header in jedem Kompilierungsszenario immer so konsumiert wird? Es kann eine bedingte Kompilierung bei der Arbeit geben, die die Klasse unter bestimmten Bedingungen zu einer "Dummy-Klasse" macht. – KABoissonneault

+3

Die fehlenden Retourentypen betreffen mich. Das ist nicht gültig C++. – NathanOliver

+3

Dies ist nicht gültig C++. –

Antwort

0

Ein Szenario, in dem Sie diesen Code verwenden, wäre, die Funktionen zu überschreiben. Diese Funktionen enthalten einige Standardcodes und könnten später überschrieben werden.

+0

Ist es ratsam, wenn Sie die .h-Datei verwenden, um die Dummy-Definitionen zu kommentieren, um stattdessen die Bibliotheksdefinitionen zu erhalten? – rtmh

+0

Wenn sie woanders implementiert sind, dann ja. Ansonsten müssten Sie diese selbst implementieren. – Shiro