windward-studios / ikvm8

Other
173 stars 36 forks source link

The specified Type must not be a generic type definition. #21

Closed Tomazzzzz closed 1 year ago

Tomazzzzz commented 1 year ago

After upgrade to 8.2.3 from 8.1.5717 and regenerating dll with ikvmc -out:jmmi86.dll -target:library jmmi.jar am I getting runtime error. The specified Type must not be a generic type definition. The same code works fine with 8.1.5717 version.

EncyManager.connectLocal(generationTask.ModelPath); _System.TypeInitializationException HResult=0x80131534 Message=The type initializer for 'com.ca.gen.jmmi.EncyManager' threw an exception. Source=jmmi86 StackTrace: at com.ca.gen.jmmi.EncyManager.connectLocal(String str) at Gen86Generator.GenGenerator.Generate(GenGenerationTask generationTask, Boolean massGeneration) in C:\Projects\Inhouse .NET Projects\MacGyver-DEV\GenGeneration\Gen86Generator\GenGenerator.cs:line 76

This exception was originally thrown at this call stack: [External Code]

Inner Exception 1: TypeInitializationException: The type initializer for 'com.ca.gen.jmmi.JMMILoader' threw an exception.

Inner Exception 2: ArgumentException: The specified Type must not be a generic type definition. Parameter name: t_

Tomazzzzz commented 1 year ago

Hello, well generation assembly file with command ikvmc -debug -out:jmmi86.dll -target:library jmmi.jar Am i getting different exception System.ArgumentException HResult=0x80070057 Message=The specified Type must not be a generic type definition. Parameter name: t Source=IKVM.Java StackTrace: at java.lang.ClassLoader.loadLibrary0(Class fromClass, File file) at java.lang.ClassLoader.loadLibrary(Class fromClass, String name, Boolean isAbsolute) at java.lang.Runtime.load0(Class fromClass, String filename) at java.lang.System.load(String filename, CallerID ) at com.ca.gen.jmmi.JMMILoader..cctor()

Tomazzzzz commented 1 year ago

Seems it is failing here:

using ikvm.@internal;
using IKVM.Attributes;
using java.lang;
using System.Runtime.CompilerServices;

namespace com.ca.gen.jmmi
{
  [SourceFile(null)]
  public abstract class JMMILoader : Object
  {
    [SpecialName]
    private static CallerID __<callerID>;

    [SpecialName]
    [MethodImpl(MethodImplOptions.NoInlining)]
    protected internal static void __<clinit>(){ }

    public static void load(){ }

    [MethodImpl(MethodImplOptions.NoInlining)]
    private JMMILoader(){ }

    static JMMILoader()
    {
      string str = java.lang.System.getenv("IEFH");
      java.lang.System.load(
        new StringBuilder().append(str).append("\\genmodel_client.dll").toString(),
        JMMILoader.__<GetCallerID>());
      java.lang.System.load(
        new StringBuilder().append(str).append("\\genmodel_jmmi.dll").toString(),
        JMMILoader.__<GetCallerID>());
    }

    static CallerID __<GetCallerID>()
    {
      if (JMMILoader.__<callerID> == null)
        JMMILoader.__<callerID> = (CallerID) new JMMILoader.__<CallerID>();
      return JMMILoader.__<callerID>;
    }

    private sealed class __<CallerID> : CallerID
    {
      internal __<CallerID>(){ }
    }
  }

Source Java:

package com.ca.gen.jmmi;

public abstract class JMMILoader {
   private JMMILoader() {
   }

   public static void load() {
   }

   static {
      String var0 = System.getenv("IEFH");
      System.load(var0 + "\\genmodel_client.dll");
      System.load(var0 + "\\genmodel_jmmi.dll");
   }
}
ams-tschoening commented 1 year ago

8.2.3 most likely isn't from Windward, but a newly created project:

https://github.com/ikvm-revived/ikvm/releases

Tomazzzzz commented 1 year ago

Sorry you are right.