Compiler error bei ATL implementierung!!
-
Hi alle zusammen,
ich hab mal ein kniffliges Problem bei dem meine "Weisheit" derbe versagt.
Folgendes hab ich vor: Ich hab ein WIN32 Dll Project geschrieben, keinerlei Unterstützung von ATL oder MFC seite durch den Assistenten ist dabei.
In der Dll befindet seich eine Klasse, die aus der Dll exportiert wird.
Eine der Klassen-Membervariablen ist ein CString. Dieser wird beim Compilieren angeprangert.1.) Die Dll bekommt zu ATL einen dynamischen link, eingestellt in den Projekteigenschaften.
2.) Die ATL CString Klasse sollte doch eigentlich exportierbar sein, oder?Den Support der CString Klasse über den:
#include <atlstr.h>
gewäreleistet.
Folgender Fehler schmeißt der Compiler raus:
error C2341: 'ATL$__z' : segment must be defined using #pragma data_seg, code_seg or section prior to use
Stelle in der atlbase.h wo der Fehler auftritt:
#pragma section("ATL$__a", read, shared) #pragma section("ATL$__z", read, shared) #pragma section("ATL$__m", read, shared) extern "C" { [b]--> __declspec(selectany) __declspec(allocate("ATL$__a")) _ATL_OBJMAP_ENTRY* __pobjMapEntryFirst = NULL;[/b] __declspec(selectany) __declspec(allocate("ATL$__z")) _ATL_OBJMAP_ENTRY* __pobjMapEntryLast = NULL;
Kann einer damit was anfangen?
Ich bin vollkommen ratlos.Ich wäre für jeden Tip oder Hinweis dankbar
Thx schonmal für die Hilfe.
codeman
-
codeman schrieb:
Folgender Fehler schmeißt der Compiler raus:
error C2341: 'ATL$__z' : segment must be defined using #pragma data_seg, code_seg or section prior to use
Ist das keine Eindeutige Fehlermeldung? Besser hätte es MS gar nicht sagen können!
Du musst eben#pragma data_seg("ATL$__a")
vor die Deklaration hinschreiben...
-
Hi Jochen,
hmmm, hast recht steht eigentlich schon da, doch vor dem Morgenkaffee arbeit mein Hirn noch nicht richtig
. Der Fehler ist behoben. Leider taucht nun die Membervariable nicht mehr in der Klasse auf.
this->meincstring
ist nicht mehr vorhanden. Was ist das jetzt.
Bzw. wo ich dich schon mal "dran" hab :D, kannst du mir kurz erklären was der:#pragma data_seg("ATL$__a")
macht. Soweit ich das verstanden habe kann man nur in diesem definierten daten segment allocierung vornehmen. Ist das so in etwa richtig?
Thx codeman
-
Also wenn Du nicht weisst was das ganze macht, dann Frage ich mich natürlich warum Du es dann machst...
Solche Sachen sollte man wirklich nur machen, wenn man ganz genau versteht was das soll...
Abgesehen davon gibt es eine Doku...
-
Leider kann man sich manchmal nicht aussuchen was man machen muss.
Und ich denken ich weis schon was ich mache und machen muss, nur ist das dll Feld ziehmlich umfangreich(neu für mich, ich komm von der C programmierung) und durch neue Möglichkeiten ergeben sich zwangsläufig neue Probleme. Ich dachte dafür ist dieses Forum da, um fragen zu lösen.Trotzdem danke für deine Hilfe
codeman
-
Die Erklärung zu den einzelnen Befehlen finden sich in der MSDN...
__declspec(allocate...):
http://msdn.microsoft.com/library/en-us/vclang/html/_langref_allocate.asp
Hier sind auch die Verweise auf das data_seg drin...
-
Fehler gefunden,
ist nicht zu fassen. Auf grund der compatibilität des Dll Codes zu OS9 war das read
#pragma section("ATL$__a", read, shared) #pragma section("ATL$__z", read, shared) #pragma section("ATL$__m", read, shared)
der pragma section Anweisung in einem compatibility header zu dem im OS9 gebräuchlichen _read umdefiniert.
Tja wer lesen kann ist bekanntlich im Vortei.codeman