Probleme mit gcroot<T>
-
error C3191: '^' : incompatible with '/clr:oldSyntax' command line option
bekomme ich wenn ich versuche was du gesagt hast
aber in dem artikel auf den ich mich bezog (http://www.codeproject.com/managedcpp/adonetinmfc.asp?df=100&forumid=16454&exp=0&select=1566682) wurde es ja auch mit dem * operator gemacht.
-
Nimm das oldSyntax mal raus und bau es auf die neue Syntax um. Machst Dir das leben damit wirklich leichter.
Der Aritkel wird etwas älter sein. Im VS2003 gab es C++/CLI nicht. Jetzt wo es da ist wirst Du Dir das leben erleichtern.
(Der eigentliche Fehler ist damit vermutlich nicht behoben, aber die Arbeit lohnt sich auf jedenfall, zumal man hier leichter helfen kann. C++/CLI sitzt einfach besser
-
jap du hast recht, habe auf normal CLI umgestellt und alle * durch ^ ersetzt, jetzt funktioniert es soweit jedenfalls fehlerfrei.
danke vielmals
-
Und warum compilierst Du mit "/clr:oldsyntax"? Würde ich dringend davon abraten.
Aber mit "oldsyntax" stimmt natürlich das "*"...Also bei mir compiliert folgendes Beispiel problemlos (/clr):
#include <vcclr.h> int main(array<System::String ^> ^args) { System::Data::DataSet ^ds; System::Data::DataTable ^dt = ds->Tables[0]; gcroot<System::Data::DataTable^> dtgc; dtgc = ds->Tables[0]; }
und folgendes auch mit "/clr:oldSyntax":
#include <vcclr.h> int main() { System::Data::DataSet *ds; System::Data::DataTable *dt = ds->Tables->get_Item(0); gcroot<System::Data::DataTable*> dtgc; dtgc = ds->Tables->get_Item(0); }
(managed C++ kennt keine BuildIn-Indexer!)
-
(managed C++ kennt keine BuildIn-Indexer!)
Ah... verdammmt. Stimmt. Das war ja der murks mit ->default
-
Allerdings kennt er weder die Bezeichner IEnumerator noch ArrayList, was das Arbeiten mit OLE extrem erschwert.
Woran liegt das?
-
Hast Du die Namensräume bekannt gemacht ?
System::Collections::ArrayList
System::Collections::Generic::IEnummerator
-
KaneMX schrieb:
Allerdings kennt er weder die Bezeichner IEnumerator noch ArrayList
!???
Vielleicht an dem fehlendenusing namespace System::Collections;
!?
-
ok ich gebe zu, die frage war dumm und unnötig
natürlich funzt es jetzt, danke nochmal
-
leider gibt es wieder ein weiteres Problem, offensichtlich wieder mit einem index, wieder C2676:
while(oEn->MoveNext()) { oRow = dynamic_cast<DataRow^>(oEn->Current); nID = System::Convert::ToInt32(oRow["id"]); // C2676 nBaujahr = System::Convert::ToInt32(oRow["baujahr"]); // C2676 nLeistung = System::Convert::ToInt32(oRow["leistung"]); // C2676 };
1>.\cdb.cpp(71) : error C2676: binary '[' : 'gcroot<T>' does not define this operator or a conversion to a type acceptable to the predefined operator
1> with
1> [
1> T=System::Data::DataRow ^
1> ]
-
Was ist denn "oRow"?
System::Data::DataRow ^dr; int i = System::Convert::ToInt32(dr["a"]);
geht bei mir Problemlos...
-
PS: Warum verwendest Du den gcroot an stellen, wo es gar nicht nötig ist?
gcroot wird *nur* benötigt, wenn Du ein managed Object in einer Klasse als *Member-Variable* ablegen willst!!! Innerhalb einer Methode kannst Du auch in einer "non-gc" Klasse direkt mit ^ arbeiten!