Export von Symbolen verhindern
-
Hi,
ich habe hier eine etwas seltsame Situation, in der eine DLL Symbole exportiert, die ich nie als __declspec(dllexport) angegeben habe: Ich habe eine DLL "basis.dll", welche diverse Klassen beinhaltet. Diese Klassen sind als
class __declspec(dllexport) BasisKlasse
angelegt, was in diesem Fall in Ordnung ist, da diese DLL diese Klassen auch exportieren soll.
Nun habe ich eine zweite DLL "meine.dll", welche selber Klassen verwendet, die sich von den Basisklassen in basis.dll ableiten:
class MeineKlasse : public BasisKlasse
MeineKlasse enthält hier NICHT das __declspec(dllexport), ist anschließend aber troztem unter den von meine.dll exportierten Symbolen zu finden. Ich vermute also mal, dass MeineKlasse auch das __declspec(dllexport) von BasisKlasse erbt.
Da das jetzt saudumm ist und MeineKlasse nicht nach außen sichtbar werden soll: wie kann ich das verhindern?
Danke schon mal!
-
Eigentlich ist das keine Eigenschaft, die geerbt wird. dllexport funktioniert nach meinem Verstehen und laut Doku nur auf das aktuelle Symbol, das damit definiert wurde.
Ich habe selber noch mal etwas gesucht und bin auf gleiche Antworten im Netz gestoßen:
http://stackoverflow.com/questions/1267811/declspecdllimport-dllexport-and-inheritance
-
Ist ja lustig, bei mir zeigt der Dependencywalker sämtliche geerbten Klassen an...muss ich die Symbole eventuell explizit strippen, damit sie rausfliegen?
-
Es stimmt schon was Martin geschrieben hat, __declspec(dllexport) gilt immer nur für die Klasse selbst, nicht für abgeleitete Klassen.
"Strippen" musst du dafür auch nix.Verwendest du vielleicht GCC? Könnte sein dass GCC sich hinsichtlich __declspec(dllexport) etwas anders verhält als MSVC.
-
Nö, ich habe noch ein ganz antikes Visual Studio 6
-
Uff.
Mit VS6 war das *glaub* ich auch nicht so. Ist aber schon so lange her dass ich damit was gemacht hab, dass ich das echt nicht mehr genau sagen kann...