Dynamically loading XSharp assemblies

This forum is meant for examples of X# code.

Post Reply
User avatar
ArneOrtlinghaus
Posts: 413
Joined: Tue Nov 10, 2015 7:48 am
Location: Italy

Dynamically loading XSharp assemblies

Post by ArneOrtlinghaus »

When trying to load XSharp assemblies with the command VulcanLoadLibrary I received error messages. When substituting this by the function below it works, at least for assemblies without the automatically called init procedures.

But I have seen that it is better to call all initialization manually in the program.
I have seen that runtime errors in the init procedures are very hard to identify, whereas when calling them in the program the runtime errors are displayed with reasonable messages on the screen.

function xsLoadLibrary(libPath as string) as System.Reflection.Assembly
local pdll as System.Reflection.Assembly
pdll := System.Reflection.Assembly.LoadFrom(libPath)
return pdll
User avatar
Chris
Posts: 4936
Joined: Thu Oct 08, 2015 7:48 am
Location: Greece

Dynamically loading XSharp assemblies

Post by Chris »

Hi Arne,

Thanks for reporting this, it is a bug (well, compatibility issue) in the compiler, as it generates assemblies with slightly different layout than VulcanLoadLibrary() expects. Should be easy enough to fix.

Chris
Chris Pyrgas

XSharp Development Team
chris(at)xsharp.eu
User avatar
wriedmann
Posts: 3765
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

Dynamically loading XSharp assemblies

Post by wriedmann »

Hi Arne,

use Reflection! Since X# currently does not need initializations like the Vulcan runtime, you should be able to do it.

I'm doing this regularly:

Code: Select all

foreach cDLLName as string in oDLLs
  cFullPath := Path.Combine( cPath, cDLLName )                           
  oAssembly := Assembly.LoadFrom( cFullPath )
  oClasses := Utility.AssemblyClasses( oAssembly, "ProdConfigBase.IConfiguration" )
  foreach cClassName as string in oClasses
    oConfiguration := ( IConfiguration ) oAssembly:CreateInstance( cClassName )
    if oConfiguration != null
      ++nLoaded
      oConfiguration:Initialize( oWindow, ProgSettings.Language )
      if oConfiguration:LastException != null
        MessageBox.Show( string.Format( e"Error loading configuration DLL {0}nn{1}nn{2}", cDLLName, oConfiguration:LastException:Message, oConfiguration:LastException:StackTrace ) )  
      endif
      ProgSettings.ProduktConfigurations:Add( oConfiguration )
    endif
  next
next
Wolfgang
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
Post Reply