Re: Class.forName and csharp classes

Jeroen Frijters <[email protected]> Fri, 17 Feb 2017 15:19:39 +0000
Newsgroups gmane.comp.java.ikvm.devel
Message-ID <AM2PR08MB0051B939C68112DD504A83DAA25D0@AM2PR08MB0051.eurprd08.prod.outlook.com>
Hi Martin,

In that case it is probably simply a class loader issue. The class loader you use for Class.forName() must be able to see the assembly. The easiest solution is to add the assembly to the boot class loader with the ikvm.runtime.Startup.addBootClassPathAssembly() method.

Regards,
Jeroen

> -----Original Message-----
> From: Martin Gerhardy [mailto:[email protected]]
> Sent: Friday, February 17, 2017 16:08
> To: Jeroen Frijters <[email protected]>; ikvm-
> [email protected]
> Subject: AW: Class.forName and csharp classes
> 
> Hi Jeroen,
> 
> thanks for the answer - I tried both:
> 
> ---------------------------
> using System.Diagnostics;
> using System;
> 
> [assembly: IKVM.Attributes.NoPackagePrefixAttribute]
> namespace foo
> {
> 	class Foo
> 	{
> 		public Foo()
> 		{
> 		}
> 	}
> 
> 	class MainClass
> 	{
> 		public static void Main (string[] args)
> 		{
> 			Console.WriteLine("starting up...");
> 			Launcher.main("foo.Foo");
> 		}
> 	}
> }
> ---------------------------
> 
> 
> package foo;
> 
> public class Launcher {
> 	public static void main(final String name) {
> 		try {
> 			System.err.println("Starting up and trying to load " +
> name);
> 			final Class<?> forName = Class.forName("cli." + name);
> 			System.out.println("Finished loading " + forName);
> 		} catch (final ClassNotFoundException e) {
> 			e.printStackTrace();
> 		}
> 	}
> }
> 
> ---------------------------
> 
> Neither works - neither the additional cli. namespace prefix nor adding
> the attribute (Not sure if I did that one correctly)
> 
> Compiling with the commands:
> 	ikvmc -classloader:ikvm.runtime.ClassPathAssemblyClassLoader -
> assemblyattributes:$(BIN)/AssemblyInfo.class -target:library $<
> 	mcs -target:exe -main:foo.MainClass -
> r:System.dll,IKVM.Runtime.dll,IKVM.OpenJDK.Core.dll,$(NAME).dll -
> out:proof-of-concept.exe GuiceRepro.cs AssemblyInfo.cs
> 
> 
> 
> Regards
> Martin
> 
> ________________________________________
> Von: Jeroen Frijters [[email protected]]
> Gesendet: Freitag, 17. Februar 2017 14:50
> An: Martin Gerhardy; [email protected]
> Betreff: RE: Class.forName and csharp classes
> 
> Hi Martin,
> 
> Did you take into account that the C# classes get a "cli." prefix in
> Java (by default)?
> 
> You can apply the IKVM.Attributes.NoPackagePrefixAttribute to the class
> or assembly to disable this.
> 
> Regards,
> Jeroen
> 
> > -----Original Message-----
> > From: Martin Gerhardy [mailto:[email protected]]
> > Sent: Wednesday, February 15, 2017 11:34
> > To: [email protected]
> > Subject: [Ikvm-developers] Class.forName and csharp classes
> >
> > Hi,
> >
> > we are converting a deserialization jar via ikvm into a dll and bind a
> > csharp class via guice to some of the serialized classes. The java
> > code contains a call for Class.forName for that class. As our injected
> > class is a csharp class, this doesn't work. Is there any way to work
> > around this? (In the sense the Class.forName also finds csharp
> > classes?)
> >
> > Regards
> > Martin


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, SlashDot.org! http://sdm.link/slashdot