Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles / All-Topics

Calling J# Code from .NET 4.0

4.33/5 (2 votes)
22 Mar 2011CPOL 12.3K  
How to call J# code in a .NET 4.0 app

Introduction

When you call a J# DLL from .NET 4.0 (or later) code, you will get an error that vjsnativ.dll could not be located. The workaround to date has been to copy vjsnativ.dll to the directory of the primary application calling the code. For an app, this is workable although a bit of a pain. But for web apps, this can be very problematic as you're talking to the underlying web server.

It turns out there's a much easier approach. The following code needs to be called in your C# code before instantiating any classes or calling any code in a J# DLL. After you call this, you can then call all of your J# code. The trick is simple – you load the library explicitly and then Windows already knows its location.

Code

C#
using System;
using System.IO;
using System.Runtime.InteropServices;
using net.windward.api.csharp;

namespace TestNet40
{
class Program
{
[DllImport("kernel32", SetLastError = true)]
static extern IntPtr LoadLibrary(string lpFileName);

static void Main(string[] args)
{
if (Environment.Version.Major > 4)
{
string folder = Path.Combine(Environment.GetFolderPath
  (Environment.SpecialFolder.System), @"..\Microsoft.NET\Framework\v2.0.50727");
folder = Path.GetFullPath(folder);
LoadLibrary(Path.Combine(folder, "vjsnativ.dll"));
}

// now call J# code
Report.Init();
Console.Out.WriteLine("success!");
}
}
} 

Calling It

The best approach is if you can place this in your initialization well before you make any calls to any J# libraries. That way you don't need to check before each call.

Originally posted at Calling J# code from .NET 4.0.

History

  • 22nd March, 2011: Initial post

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)