Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles / .NET / .NET4

Calling a J# DLL from .NET 4.0

0.00/5 (No votes)
25 Feb 2011CPOL 13.5K  
Calling a J# DLL from .NET 4.0

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 work-around 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 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

License

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