c ++: Definition der Dllimport-Funktion nicht erlaubt, Erstellung mit Visual Studio 2010

8

Ich benutze Visual Studio 2010, um eine .dll zu erstellen. Ich schrieb einen Versuch als:

%Vor%

Und die Datei triallDLL.cpp:

%Vor%

Mit diesen beiden Dateien im Projekt habe ich dem Projekt über den Property Manager von Visual Studio 2010 ein Eigenschaftsblatt hinzugefügt und TRIALDLL_EXPORT zu Benutzermakros hinzugefügt. Nach all diesen, gibt die nette Intellisense mir Fehler für jede Funktion in der CPP-Datei definiert und beschwert sich "Fehler: eine Funktion deklariert 'dllimport' möglicherweise nicht definiert". Es scheint also, dass Intellisense TRIALDLL_EXPORT nicht definiert findet. Ich dachte, es könnte einen Unterschied machen, wenn ich das Projekt tatsächlich erstelle, aber das Ergebnis suggeriert denselben Fehler: "Fehler C2491: 'new_MyMathFuncs': Definition der Funktion 'dllimport' nicht erlaubt". Dann ist klar, dass das Makro TRIALDLL_EXPORT immer noch nicht in der Kompilierungszeit definiert ist.

Nachdem ich kein Makro über Visual Studio hinzugefügt habe, habe ich auch versucht, die Codezeile #define TRIALDLL_EXPORT in trialDLL.cpp zu setzen, aber es hat auch nicht geholfen. Ich frage mich, was ist der richtige Weg, dies zu tun? Wie informiere ich den Compiler, dass der Mikrocomputer so definiert ist, dass TRIALDLL_API als dllexport und nicht als dllimport ? Ausgewertet wird?

Wenn ich die .dll erfolgreich erstellen kann, gibt es dann eine systematische Möglichkeit, die Funktionalität der DLL zu testen / zu verifizieren?

Danke für jede Hilfe im Voraus! (Obwohl ich weiß, dass es hier im Stackoverflow ein Problem ist, die Frage zu würdigen, fühle ich mich unhöflich, dies nicht zu tun. Verzeihen Sie mir die Ineffizienz, die durch diese Zeilen verursacht wird.)

    
springRoll 21.06.2013, 15:56
quelle

3 Antworten

10

"Benutzermakros" in VS-Eigenschaftenblättern haben nichts mit Preprozessor-Makros zu tun. Setzen Sie TRIALDLL_EXPORT in den Abschnitt C/C++ > Preprocessor > Preprocessor Definitions

des Eigenschaftenblattes

"Benutzermakros", die nur in den Eigenschaftsblättern definiert werden können, ermöglichen es Ihnen, eigene "Variablen" zu erstellen, die in Visual Studio-Eigenschaften verwendbar sind, ähnlich wie die eingebauten $(TargetName) , $(SolutionDir) etc.

    
Angew 21.06.2013, 16:03
quelle
1

Setzen Sie

%Vor%

im Block #else des Headers. Dann experimentiere mit den Projekteinstellungen oder dem #define , bis du es richtig machst. Haben Sie das Eigenschaftsblatt vielleicht nur einer Konfiguration hinzugefügt? Hast du den #define ganz oben in der Datei platziert? Haben Sie irgendwelche PCH-Sachen, die dazu führen, dass Ihre Einstellungen ignoriert werden? Und so weiter.

    
Sebastian Redl 21.06.2013 16:02
quelle
0

Der Code sieht gut aus und muss funktionieren, wenn TRIALDLL_EXPORT tatsächlich definiert ist. Vermutlich hast du das irgendwie vermasselt (wie für eine andere Konfiguration oder nur für eine Datei) oder nicht neu erstellt.

Wenn Sie komplett verloren sind, fragen Sie nach der Ausgabe des Präprozessors und schauen Sie sich das an. Wie bei define gibt es überhaupt keinen dllimport, der Fehler ist auch nicht möglich.

BEARBEITEN: Ich habe gerade bemerkt, dass du geschrieben hast. _Ich habe auch versucht, die Codezeile zu setzen: #define TRIALDLL_EXPORT in_ trialDLL.cpp . Ich dachte, du würdest es an die Spitze des Headers setzen, um es zu testen. Versuchen Sie es zuerst, nur um zu sehen, dass es gut funktioniert. Dann können Sie es entfernen, nachdem Sie den richtigen Ort gefunden haben.

    
Balog Pal 21.06.2013 16:02
quelle

Tags und Links