Thread: [Ikvm-developers] Class.getName() for normal .NET classes
Brought to you by:
jfrijters
From: Ted O'C. <toc...@gm...> - 2008-05-07 13:45:04
|
Is it possible to dynamically load a .NET class and get the real class name back without having to check for and strip the "cli." prefix? Here is my scenario: String realName = "com.acme.MyClass"; Class clazz = Class.forName(realName); String ikvmName = clazz.getName(); realName == ikvmName, when realName represents a class that was written in Java but converted to .NET with ikvmc. "cli." + realName == ikvmName, when realName represents a normal .NET class (i.e. written in C#, VB.net, etc. like "System.Data.SqlClient.SqlConnection") It would be nice if the ikvmName was always the same as the realName in this case. Thanks. Ted |
From: Jeroen F. <je...@su...> - 2008-05-07 16:03:24
|
Ted O'Connor wrote: > Is it possible to dynamically load a .NET class and get the real class > name back without having to check for and strip the "cli." prefix? You can use ikvm.runtime.Util.getInstanceTypeFromClass(clazz).get_TypeName(). (You can run ikvmstub on IKVM.OpenJDK.ClassLibrary.dll to get a jar that contains stubs for ikvm.runtime.Util.) Regards, Jeroen |
From: Ted O'C. <toc...@gm...> - 2008-05-07 18:26:11
|
Thanks Jeroen. I have code that might be running as Java or .NET so I didn't want to introduce an ikvm.runtime.Util reference. It is easy enough for me to check for the "cli." prefix and handle it accordingly. I was just wondering if there was a better way or if this was a bug. Ted On Wed, May 7, 2008 at 12:03 PM, Jeroen Frijters <je...@su...> wrote: > Ted O'Connor wrote: > > Is it possible to dynamically load a .NET class and get the real class > > name back without having to check for and strip the "cli." prefix? > > You can use ikvm.runtime.Util.getInstanceTypeFromClass(clazz).get_TypeName(). > > (You can run ikvmstub on IKVM.OpenJDK.ClassLibrary.dll to get a jar that contains stubs for ikvm.runtime.Util.) > > Regards, > Jeroen > > |
From: Jeroen F. <je...@su...> - 2008-05-08 05:09:46
|
Ted O'Connor wrote: > I have code that might be running as Java or .NET so I didn't want to > introduce an ikvm.runtime.Util reference. It is easy enough for me to > check for the "cli." prefix and handle it accordingly. I was just > wondering if there was a better way or if this was a bug. There is no reason you can't have an ikvm.runtime.Util reference when running in Java, just make you don't actually call it when running on Java (or catch the NoClassDefFoundError). Be aware that if you look for (and chop off) the "cli." prefix, that'll work most of the time, but not always. There is additional name mangling going on and it is also possible for a .NET type not to get the "cli." prefix (by adding the IKVM.Attributes.NoPackagePrefixAttribute to the type or assembly. Regards, Jeroen |