Accessing a List object in Mixed mode code.
-
Hi guys, here is my problem I have defined a list of managed objects in MyClass.h:
class MyClass.h { public: MyClass(); gcroot<List<MessageListener^>^> messageListeners; }
and using the list in the .cpp fileMyClass::MyClass() { messageListeners = gcnew List<MessageListener^>(); } void MyClass::addMessageListener(u_short id,u_short version) { MessageListener^ msgl = gcnew MessageListener(id,version); messageListeners->Add(msgl); }
...as you can see I'm trying to use a list of managed objects in an unmanaged class. My problem is than I can't access the objects in the listvoid MyClass::findMessageListener(u_short id,u_short version) { for(int i = 0;iCount;i++) { MessageListener^ msg = messageListeners[i]; if(msg->id == id && msg->version == version) { return msg; } } return nullptr; }
I would like to have some comments on how this can be done. Thx -
Hi guys, here is my problem I have defined a list of managed objects in MyClass.h:
class MyClass.h { public: MyClass(); gcroot<List<MessageListener^>^> messageListeners; }
and using the list in the .cpp fileMyClass::MyClass() { messageListeners = gcnew List<MessageListener^>(); } void MyClass::addMessageListener(u_short id,u_short version) { MessageListener^ msgl = gcnew MessageListener(id,version); messageListeners->Add(msgl); }
...as you can see I'm trying to use a list of managed objects in an unmanaged class. My problem is than I can't access the objects in the listvoid MyClass::findMessageListener(u_short id,u_short version) { for(int i = 0;iCount;i++) { MessageListener^ msg = messageListeners[i]; if(msg->id == id && msg->version == version) { return msg; } } return nullptr; }
I would like to have some comments on how this can be done. Thxkristmun wrote:
gcroot<List<MessageListener^>^> messageListeners;
kristmun wrote:
MessageListener^ msg = messageListeners[i];
"messageListeners" is a gcroot template instance and does not have an operator []. You need to use the conversion operator ( operator T ) to get at the CLR List object before you can get to the indexer ([]).
MessageListener^ msg = ((List<MessageListener^>^)messageListeners)[i];
led mike
-
kristmun wrote:
gcroot<List<MessageListener^>^> messageListeners;
kristmun wrote:
MessageListener^ msg = messageListeners[i];
"messageListeners" is a gcroot template instance and does not have an operator []. You need to use the conversion operator ( operator T ) to get at the CLR List object before you can get to the indexer ([]).
MessageListener^ msg = ((List<MessageListener^>^)messageListeners)[i];
led mike