Calling functions in VB6 ActiveX DLL Using JNI in Java

I have an old VB6 program that is 10 years old, and it is communicating with the COM interface of a commercial program of the time, PADS Layout 2005. I would like to reuse my fully functional code contained in the VB6 program I wrote at the time in a Java program, and also since all the examples for communicating with PADS layout are done in VB6 or a proprietary VB scripting API, it would be very hard to do anything else, practically.

So I want to put all essential code from the VB6 program into a VB6 ActiveX DLL, wrap it into a VC++ DLL and access functions in it it with JNI using Java.

I found a simple example, that looked very reasonable, that worked to a certain point:

https://www.classle.net/book/creation-dll-vb-and-deployment-java-using-jni

It is just adding up 2 int numbers converted to String and displayed, the activeX dll VB6 function used:

Public Function add(ByVal a As Integer, ByVal b As Integer)

MsgBox "Result: " + CStr(a + b) 'Convert to String function

End Function

Open in new window



I did the exact same thing as suggested in example, same folder structure and file names, and I got all the way to creating the header files, as described at the link above:

 4) Now create the JNI header files for the class file using the following command

                   javah  –jni  NativeImpl

All I get is various error messages, I tried several things:

Running javah on command line
I am using an XP virtual machine, Visual Studio 6 installed, which includes Visual Basic 6 and Visual C++ 6.0 to make the wrapper DLL. I am using older Java 1.6, and still I slightly had to change code to avoid using a depricated method. I also did a decompile on the Java class file I created, just to check, but it looks fine to me:

// Decompiled by DJ v3.11.11.95 Copyright 2009 Atanas Neshkov  Date: 4/18/2014 7:18:57 AM
// Home Page: http://members.fortunecity.com/neshkov/dj.html  http://www.neshkov.com/dj.html - Check often for new version!
// Decompiler options: packimports(3) 
// Source File Name:   NativeImpl.java

import java.io.*;

public class NativeImpl
{

    public NativeImpl()
    {
    }

    public native void add(int i, int j);

    public static void main(String args[])
        throws IOException
    {
        DataInputStream datainputstream = new DataInputStream(System.in);
        NativeImpl nativeimpl = new NativeImpl();
        System.out.println("Enter number 1 & 2:");
        int i = Integer.parseInt(datainputstream.toString());
        int j = Integer.parseInt(datainputstream.toString());
        nativeimpl.add(i, j);
    }

    static 
    {
        System.loadLibrary("dllproj");
    }
}

Open in new window


The only change I had to make in the OS is adding a CLASSPATH, so that the javac compiler could be found on command line. that should be enough, right?:
CLASSPATH
I have all the files, in the zip file on my Google drive:

https://drive.google.com/file/d/0BzAVH2D-BU9IQ21tcDZwb1RhUXc/edit?usp=sharing

(Expert Exchange did not let me upload a zip containing a dll)

Thank you for your help.
AttilaBAsked:
Who is Participating?
 
CEHJConnect With a Mentor Commented:
You'll find it much easier using JNA
0
 
AttilaBAuthor Commented:
Ok. I can do that. However, let's suppose I create an ActiveX DLL from the VB6 code I want to reuse. Do I still need to wrap it into a C++ DLL before I have access to it through JNA?

If yes, since I don't really have much experience with C++, can you point me to some step-by-step example on how to do that?
(I mostly did Java and VB6)

Or is there perhaps a good working example of how to go from an ActiveX DLL connecting all the way to Java, using JNA?

Thanks.
0
 
CEHJCommented:
Do I still need to wrap it into a C++ DLL before I have access to it through JNA?
No, JNA can access the library directly
0
Upgrade your Question Security!

Your question, your audience. Choose who sees your identity—and your question—with question security.

 
AttilaBAuthor Commented:
Even if it is ActiveX DLL, not a C++ DLL?

Do you know of any good examples or tutorials on that?
0
 
CEHJCommented:
ActiveX is little more than a brand name. Also, the language in which is written is irrelevant.The only thing that's relevant is the binary format and its exports

I could only google, like you, for the links to tutorials
0
 
AttilaBAuthor Commented:
OK. Thanks.
0
 
CEHJCommented:
:)
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.