Probleme mit gcroot<T>
-
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!