1. Getting started
- 1.1. Installing Javonet
- 1.2. Activating Javonet
- 1.3. Adding References to .NET Libraries
- 1.4. XML Configuration File
- 1.5. Using the Javonet Fluent Interface
- 1.7. Introduction to Using .NET Back-end and UI Components in Java
2. Calling methods
- 2.1. Invoking Static Methods
- 2.2. Creating Instance and Calling Instance Methods
- 2.3. Calling Generic Methods
3. Working with .NET Objects
- 3.1. Creating Instance Of Generic Object
- 3.2. Extending the .NET Class in Java and Wrapping .NET Methods
4. Fields and Properties
- 4.1. Get/Set Values for Static Fields and Properties
- 4.2. Get/Set Values for Instance Fields and Properties
5. Methods Arguments
- 5.1. Passing Reference-Type Arguments
- 5.2. Passing Arguments by Reference with “ref” and “out” Keywords
- 5.3. Passing typeof(Type) as Method Argument
- 5.4. Calling Overloaded Method Passing Null Argument
6. Nested Types
7. Enums
8. Arrays and Collections
- 8.1. Arrays: Using Value-Type and Reference-Type Arrays
- 8.2. Working with .NET arrays and collections from Java with Javonet
9. Embeding UI controls
10. Referencing libraries
11. Off-line activation
12. Events and Delegates
13. Disposing and Garabage Collection
14. .NET Configuration Files (AppConfig, WebConfig)
15. Exceptions, Debugging and Testing
- 15.. Handling Activation Issues
- 15.1. Handling .NET Exceptions
- 15.2. How to debug .NET code called from Java
- 15.3. Debugging Javonet Enabled Application
16. Strongly-Typed Wrappers
17. Advanced Activation and Licensing
- 17.1. Runtime vs. Offline vs. Compile Time Activation
- 17.2. Project Activation Tool
- 17.6. Delegating Activation Server
18 Other usage scenarios
Adding References to .NET Libraries Stored on Disk or in GAC
Javonet allows you to use any .NET library. As with any regular .NET application, you need to reference the libraries you are planning to use. You can reference any custom DLL file on your computer or registered in GAC, as well as any library from the .NET Framework.
To add a reference, call the Javonet.addReference(“dll path or name”) method.
Example
public static void main(String[] args) throws JavonetException { Javonet.activate("YOUR NAME", "your@email.com", "YOUR-LICENSE-KEY", JavonetFramework.v40); Javonet.addReference("System.Windows.Forms","System.Drawing"); Javonet.addReference("yourDotNet.dll"); }
In the addReference argument, you can provide the local DLL file name, the full path or the name of the library registered in GAC. If you plan to reference more than one library, you can pass all of them as arguments, or call addReference several times.
Note: By default Javonet references mscorlib from the .NET framework.
Adding references to .NET libraries from memory stream
If you are planning to embed all your .NET code in single JAR file either for simplifying deployment procedures, hiding the unnecessery complexity from the user or because your project is Java applet, you can use the possibility of adding references to .NET libraries using memory stream.
To add reference using memory stream call the Javonet.addReference(“dll name”, dll_byte_array); method. Javonet still requires to provide the DLL name for caching and listing purposes. The name can be either full name with “.dll” extension or just the DLL name or easy to understand alias. The second argument is the DLL byte array. You need to load your .NET DLL from embeded resource in your JAR file, from disk or other location into the byte array and pass that array as argument to this method.
If your DLL has dependency reference to other DLL you should load all the dependencies and target library using addReference before starting any operations on the types stored in those libraries. Javonet will automatically resolve the dependant types from DLLs provided.
You can pass both byte[] or boxed Byte[] however Byte[] is preferred. In case of passing unboxed byte[] array Javonet will perform the boxing internally before passing the array to .NET.
See the example below how you can add reference to .NET library using byte array.
Path path = Paths.get("Javonet.ValueTypesSample.dll"); byte[] data = Files.readAllBytes(path); Javonet.addReference("Javonet.ValueTypesSample.dll",data);
To completely hide the .NET DLLs from end-user you can embed them in your JAR file and load using InputStreams. Example below shows how to convert JAR file embedded resource into byte array and pass to addReference method:
public static void main(String[] args) throws JavonetException, IOException { Javonet.activate("your@mail.com", "your-javonet-license-key", JavonetFramework.v45); AddEmbeddedDllReference("YourLibraryName.dll"); } private static void AddEmbeddedDllReference(String fileName) throws IOException, JavonetException{ ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); InputStream input = classLoader.getResourceAsStream(fileName); byte[] dllBytes = IOUtils.toByteArray(input); Javonet.addReference(fileName,dllBytes); }
Adding references to .NET libraries through an XML configuration file
There are many benefits to setting up Javonet using an XML configuration file. It simplifies distribution of your application to your team, lets you update the Javonet references more quickly, and avoids hardcoded referenced DLLs details.
Before the first usage Javonet looks for XML configuration file and loads defined references. Using XML references you can still add additional libraries in Java code using standard approach.
More about using XML configuration file you will find in Activating Javonet section.
Sample Javonet XML configuration file with DLLs references
<?xml version="1.0" encoding="ISO-8859-1" ?> <javonet> <references> <reference>System.Windows.Forms</reference> <reference>System.Drawing</reference> <reference>yourDotNet.dll</reference> </references> <activation> <username>YOUR NAME</username> <email>your@email.com</email> <licencekey>YOUR-LICENSE-KEY</licencekey> </activation> <settings> <framework>v40</framework> </settings> </javonet>