|
|
Hi!
I'm writing a cross-platform app using the .NET framework. The bulk of my program is in C# but for performance reasons, I'm had to implement a bit in Managed C++.
My Managed C++ .dll includes a class that implements the IList interface:
...
__property virtual bool get_IsReadOnly();
__property virtual Object* get_Item(int index);
__property virtual void set_Item(int index, Object* value);
virtual int Add(Object* value);
etc.
So, the get_Item/set_Item properties above appear as the Item property in VB.NET and MC++. In C#, it should appear as an indexer (object this[int index]). However, what I get is two methods called get_Item and set_Item.
What's wrong?
|
|
|
|
|
This problem has been reported a few days ago in this same forum by someone else. Apparently MC++ collections are not accessible through C# indexers.
I haven't tried it out yet.
Nish
Author of the romantic comedy
Summer Love and Some more Cricket [New Win]
Buy it, read it and admire me
|
|
|
|
|
Its not just MC++ collections that can't be accessible through C# indexers; its that MC++ indexers don't come up in C# as indexers.
I can't figure out why that is; because I haven't looked into it much; maybe I'll revisit that issue now
James
|
|
|
|
|
James T. Johnson wrote:
Its not just MC++ collections that can't be accessible through C# indexers; its that MC++ indexers don't come up in C# as indexers.
I can't figure out why that is; because I haven't looked into it much; maybe I'll revisit that issue now
Puzzling!!!
Nish
Author of the romantic comedy
Summer Love and Some more Cricket [New Win]
Buy it, read it and admire me
|
|
|
|
|
It takes the debugger about 10 seconds to start up when debugging mixed managed and unmanaged C++ code. If I set the debugger to "managed only", the application is launched in less than one second. I noticed that the network is very busy during the launching of the debugger when in mixed mode - is there something I can change to get mixed mode debugging to startup faster? Thanks
Chris Hafey
|
|
|
|
|
I have had the same problem. When mixing managed and unmanaged code the debugger is super slow. Sometimes I get so fed up I use Ctrl-F5 and run it non-debugged
Nish
Author of the romantic comedy
Summer Love and Some more Cricket [New Win]
Buy it, read it and admire me
|
|
|
|
|
I hear you. I am soooo sick of this. I need to find a computer running dual processors!!!
|
|
|
|
|
|
I'm writting an app in MC++. One of its class is a collection and I don't know what to do to have indexers in C#.
When I disassemble C# code the indexer function is as follow:
get_Item : class System.String(int32)
I tried to add function like this but I didn't work.
Can somebody tell if it's possible.
|
|
|
|
|
Create a property called Item which takes a common parameter in both its set/get functions. ie
__property System::String* get_Item(int index)
{
....
}
__property void set_Item(int index, System::String* value)
{
....
} I don't see anything that lets you create a C# indexer were the class instance can be treated as an array; I assume if you use the Item property name it allows C# to use it as if it were one.
HTH,
James
|
|
|
|
|
I don't work.
C++ function disassembly is
.method public specialname instance string
get_Item(int32 index) cil managed
and C# is
.method public hidebysig specialname instance string
get_Item(int32 index) cil managed
Mayby it's possible to write this function in CLR?
|
|
|
|
|
It appears Indexers created in MC++ only work in MC++ AND you can't create an indexer that operates on a class instance.
I'll look into it more after the hockey game
James
|
|
|
|
|
I'll appreciate it.
Thanks
|
|
|
|
|
I want to serialize using xml a class which contains a IPEndPoint field. I can't get it to work. Does anybody know what to do? But I don't want to use other formatter. Help!!! Please.
public class __gc Message
{
public:
__property Byte get_ByteMessage ( )[] { return m_byteMessage; }
__property void set_ByteMessage ( Byte byteMessage[] ) { m_byteMessage = byteMessage; }
__property IPEndPoint* get_Sender ( ) { return m_ipeEndPoint; }
private:
Byte m_byteMessage[];
IPEndPoint* m_ipeEndPoint;
}
|
|
|
|
|
Is IPEndPoint a serializable class? If not it won;t get serialized. Not automatically. Not sure of this, but if you can derive another class from IPEndPoint, and then add the serialization stuff, it just might work. Not very sure about it though, as I already said
Author of the romantic comedy
Summer Love and Some more Cricket [New Win]
Buy it, read it and admire me
|
|
|
|
|
IPEndPoint is a serializable class. In addition, I can't even serialize IPEndPoint itself using xml of course.
m_xmlsSerializer = new XmlSerializer( __typeof ( IPEndPoint) );
Any other ideas?
|
|
|
|
|
Michael Mac wrote:
I can't even serialize IPEndPoint itself using xml of course.
Does it have a public constructor? The exception normally gives the detail reason of what is missing from the class
|
|
|
|
|
The code shown below
XmlSerializer* xml = new XmlSerializer ( __typeof( IPEndPoint ) );
returns an exception with the message: "There was an error reflecting 'System.Net.IPEndPoint'".
So I think it's impossible to serialize IPEndPoint class using XML. The alternatives are BinaryFormatter and SoapFormatter.
43 68 65 65 72 73 2c
4d 69 63 68 61 65 6c
|
|
|
|
|
Correct; unfortunately MS didn't document this topic very well. The XmlSerializer doesn't use any of the other serialization stuff, no Serializable attribute nor ISerializable; I think its a shame myself.
The XmlSerializer works by using the reflection.emit classes to construct a class that will place all the public fields/property's in an XML document; when it deserializes it tries to access the nodes in the document as the field/property name to place the value back in. When it does this it creates an instance of the object using the default constructor.
It DOES let you control some functionality by using Attributes and the OverrideAttributes class; but I don't like that solution very well.
James
|
|
|
|
|
Suppose I have an old application with unmanaged code and I adding some .NET classes that are of course managed.
The question is: Will my unmanaged code be compiled as native code and the managed code will be CLR metadata? I am asking this, because I want my old, unmanaged part of application to be very fast, not a MSIL that is at first run (?) compiled into native code.
Best regards,
Alexandru Savescu
|
|
|
|
|
Use #pragma unmanaged to specify that the following code is to be compiled to native code and #pragma managed when you end the native stuff
Author of the romantic comedy
Summer Love and Some more Cricket [New Win]
Buy it, read it and admire me
|
|
|
|
|
Thanks Nish!
However what if I want to declare a managed type inside of an existing class? Will then my whole class be managed? (This is something that I would not like )
Best regards,
Alexandru Savescu
|
|
|
|
|
Alexpro wrote:
Will then my whole class be managed? (This is something that I would not like )
No. If you want to use a managed type inside say your CDialog class, then you'll have to only add #pragma managed for the function in the class, where you use the managed type. That was how it was in Beta 2. I didn't chk to see if it allows you to have a managed line of code inside an unmanaged marked function. I should think not!
Nish
Author of the romantic comedy
Summer Love and Some more Cricket [New Win]
Buy it, read it and admire me
|
|
|
|
|
Nish - Native CPian wrote:
if it allows you to have a managed line of code inside an unmanaged marked function. I should think not!
It doesn't!
Best regards,
Alexandru Savescu
|
|
|
|