Frage

Ich habe eine DLL, die in C ++ geschrieben ist und ich möchte den Namen für ein paar exportierten Methoden Mangeln zu unterdrücken. Die Methoden sind global und sind nicht Mitglieder einer Klasse. Gibt es eine Möglichkeit, dies zu erreichen?

BTW: Ich bin mit VS2008.

War es hilfreich?

Lösung

„bradtgmurray“ ist richtig, aber für Visual C ++ Compiler, müssen Sie explizit sowieso Ihre Funktion exportieren. Aber mit einer DEF-Datei wie vorgeschlagen „Serge - appTranslator“. Ist der falsche Weg, es zu tun

Was ist die universelle Art und Weise Symbole auf Visual C ++ zu exportieren?

Mit dem declspec (dllexport / dllimport) Anweisung, die sowohl für C und C ++ Code funktioniert, verziert oder nicht (während der .DEF beschränkt sich auf C, wenn Sie Ihren Code von Hand dekorieren wollen).

Also der richtige Weg undecorated Funktionen in Visual C ++ exportieren, um den Export "C" Idiom Kombination, wie "bradtgmurray" beantwortet, und das Dllimport / Dllexport Stichwort.

Ein Beispiel?

Als Beispiel habe ich auf Visual C ++ ein leeres DLL-Projekt, und schrieb zwei Funktionen, eine synchronisierte CPP, weil sie eingerichtet wurde, und der andere C, weil es nicht war. Der Code lautet:

// Exported header
#ifdef MY_DLL_EXPORTS
#define MY_DLL_API __declspec(dllexport)
#else
#define MY_DLL_API __declspec(dllimport)
#endif

// Decorated function export : ?myCppFunction@@YAHF@Z
MY_DLL_API int myCppFunction(short v) ;

// Undecorated function export : myCFunction
extern "C"
{
MY_DLL_API int myCFunction(short v) ;
} ;

Ich glaube, Sie bereits wissen, aber der Vollständigkeit halber ist das MY_DLL_API Makro in der DLL-Make-Datei definiert werden (das heißt die vcproj), aber nicht von DLL-Benutzer.

Der C ++ Code ist einfach zu schreiben, aber der Vollständigkeit halber, werde ich es unten schreiben:

// Decorated function code
MY_DLL_API int myCppFunction(short v)
{
   return 42 * v ;
}

extern "C"
{

// Undecorated function code
MY_DLL_API int myCFunction(short v)
{
   return 42 * v ;
}

} ;

Andere Tipps

umgibt die Funktionsdefinitionen mit extern "C" {}

extern "C" {
    void foo() {}
}

Siehe http://www.parashift.com /c++-faq-lite/mixing-c-and-cpp.html

Sie können alle manglings vermeiden (C ++, cdecl, stdcall, ...) für exportierte Funktionen eine DEF-Datei mit einem Exportabschnitt verwendet wird. Erstellen Sie einfach eine MyDll.def Datei und fügen Sie es zu einem Projekt:

LIBRARY "MyDLL"
EXPORTS
  Foo
  Bar

Eigentlich sind die Chancen der Assistent bereits eine def-Datei für Sie erstellt. Sie müssen nur in dem Exportabschnitt füllen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top